diff --git a/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/EngineeringDebuggingMode/PlcCommunicationUtil.cs b/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/EngineeringDebuggingMode/PlcCommunicationUtil.cs index 3e8c13e..26526fc 100644 --- a/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/EngineeringDebuggingMode/PlcCommunicationUtil.cs +++ b/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/EngineeringDebuggingMode/PlcCommunicationUtil.cs @@ -1,11 +1,5 @@ using Mesnac.Action.ChemicalWeighing.Entity; -using Mesnac.PlcUtils; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; + namespace Mesnac.Action.ChemicalWeighing.EngineeringDebuggingMode diff --git a/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/EngineeringDebuggingMode/x-Contorl/ValveStateControl/ValveStateControl.cs b/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/EngineeringDebuggingMode/x-Contorl/ValveStateControl/ValveStateControl.cs index 426aad1..3544014 100644 --- a/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/EngineeringDebuggingMode/x-Contorl/ValveStateControl/ValveStateControl.cs +++ b/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/EngineeringDebuggingMode/x-Contorl/ValveStateControl/ValveStateControl.cs @@ -1,5 +1,5 @@ using Mesnac.Action.ChemicalWeighing.Entity; -using Mesnac.PlcUtils; + using System; using System.Collections.Generic; using System.ComponentModel; diff --git a/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/FreeDb/FreeSqlUnit.cs b/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/FreeDb/FreeSqlUnit.cs index 98f5677..58e9c1e 100644 --- a/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/FreeDb/FreeSqlUnit.cs +++ b/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/FreeDb/FreeSqlUnit.cs @@ -3,6 +3,7 @@ using Mesnac.Codd.Session; using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -11,31 +12,27 @@ namespace Mesnac.Action.ChemicalWeighing.FreeDb { public class FreeSqlUnit { - private static IFreeSql _instance = null; - private FreeSqlUnit() { } - public static IFreeSql Instance - { - get - { - if (_instance == null) - { - - DbHelper dbHelper = Mesnac.Basic.DataSourceFactory.Instance.GetDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Local); - - _instance = new FreeSql.FreeSqlBuilder() - .UseConnectionString(FreeSql.DataType.SqlServer, dbHelper.DbSession.ConnectionString) - .UseAutoSyncStructure(false) //自动同步实体结构到数据库 - .Build(); //请务必定义成 Singleton 单例模式 - } - return _instance; - } - } - - internal static T Select() + + + public static IFreeSql Instance => freeSql.Value; + + + static Lazy freeSql = new Lazy(() => { - throw new NotImplementedException(); - } + DbHelper dbHelper = Mesnac.Basic.DataSourceFactory.Instance.GetDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Local); + return new FreeSql.FreeSqlBuilder() + .UseMonitorCommand(cmd => Trace.WriteLine($"Sql:{cmd.CommandText}"))//监听SQL语句,Trace在输出选项卡中查看 + .UseConnectionString(FreeSql.DataType.SqlServer, dbHelper.DbSession.ConnectionString) + .UseAutoSyncStructure(false) //自动同步实体结构到数据库,FreeSql不会扫描程序集,只有CRUD时才会生成表。 + .Build(); + }); + + } } + + + + diff --git a/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/LjPlanning/DownloadAction.cs b/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/LjPlanning/DownloadAction.cs index 78a0608..8c909bd 100644 --- a/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/LjPlanning/DownloadAction.cs +++ b/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/LjPlanning/DownloadAction.cs @@ -12,7 +12,7 @@ using Mesnac.Action.ChemicalWeighing.LjMixManager; using Mesnac.Action.ChemicalWeighing.LjPlanning.Db; using Mesnac.Action.ChemicalWeighing.LjPlanning.Entity; using Mesnac.Action.ChemicalWeighing.LjProdcutLine; -using Mesnac.PlcUtils; + namespace Mesnac.Action.ChemicalWeighing.LjPlanning diff --git a/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/LjPlanning/PauseAction.cs b/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/LjPlanning/PauseAction.cs index 291d6b0..aa20a28 100644 --- a/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/LjPlanning/PauseAction.cs +++ b/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/LjPlanning/PauseAction.cs @@ -3,7 +3,7 @@ using System.Linq; using System.Windows.Forms; using Mesnac.Action.Base; using Mesnac.Action.ChemicalWeighing.LjPlanning.Db; -using Mesnac.PlcUtils; + namespace Mesnac.Action.ChemicalWeighing.LjPlanning { diff --git a/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Mesnac.Action.ChemicalWeighing.csproj b/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Mesnac.Action.ChemicalWeighing.csproj index 8919388..83c110a 100644 --- a/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Mesnac.Action.ChemicalWeighing.csproj +++ b/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Mesnac.Action.ChemicalWeighing.csproj @@ -125,8 +125,9 @@ ..\..\..\packages\FreeSql.Repository.3.2.800\lib\net45\FreeSql.Repository.dll - - ..\..\..\PlugInPlatform\HslCommunication.dll + + False + ..\..\HslCommunication.dll False @@ -969,10 +970,6 @@ {ad132cad-5288-44dc-a38f-4b0658fc228c} Mesnac.DoUtils - - {88eac8d1-8783-478c-ad9d-f916673b7004} - Mesnac.PlcUtils - diff --git a/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Test/TestAction.cs b/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Test/TestAction.cs index 5a8901f..254eb68 100644 --- a/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Test/TestAction.cs +++ b/Actions/ChemicalWeighing/Mesnac.Action.ChemicalWeighing/Test/TestAction.cs @@ -42,6 +42,12 @@ namespace Mesnac.Action.ChemicalWeighing.Test .ToDataTable("*"); this.startdate.MCValue = DateTime.Now.ToString() + dt2.Rows.Count; + + + + DbHelper dbHelper = Mesnac.Basic.DataSourceFactory.Instance.GetDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Local); + + var dt= dbHelper.GetDataTableBySql("select * from ActionCode"); } List mcControllist; IBaseControl startdate; diff --git a/Actions/HslCommunication.dll b/Actions/HslCommunication.dll new file mode 100644 index 0000000..7f33ea0 Binary files /dev/null and b/Actions/HslCommunication.dll differ diff --git a/Actions/HslCommunication.xml b/Actions/HslCommunication.xml new file mode 100644 index 0000000..28d46e7 --- /dev/null +++ b/Actions/HslCommunication.xml @@ -0,0 +1,60934 @@ + + + + HslCommunication + + + + + 一个基于傅立叶变换的一个滤波算法 + + + 非常感谢来自北京的monk网友,提供了完整的解决方法。 + + + + + 对指定的数据进行填充,方便的进行傅立叶计算 + + 数据的数据类型 + 数据源 + 输出的长度 + 填充结果 + + + + 对指定的原始数据进行滤波,并返回成功的数据值 + + 数据源,数组的长度需要为2的n次方。 + 滤波值:最大值为1,不能低于0,越接近1,滤波强度越强,也可能会导致失去真实信号,为0时没有滤波效果。 + 滤波后的数据值 + + + + 对指定的原始数据进行滤波,并返回成功的数据值 + + 数据源,数组的长度需要为2的n次方。 + 滤波值:最大值为1,不能低于0,越接近1,滤波强度越强,也可能会导致失去真实信号,为0时没有滤波效果。 + 滤波后的数据值 + + + + 对指定的原始数据进行滤波,并返回成功的数据值 + + 数据源,数组的长度需要为2的n次方。 + 滤波值:最大值为1,不能低于0,越接近1,滤波强度越强,也可能会导致失去真实信号,为0时没有滤波效果。 + 滤波后的数据值 + + + + 对指定的原始数据进行滤波,并返回成功的数据值 + + 数据源,数组的长度需要为2的n次方。 + 滤波值:最大值为1,不能低于0,越接近1,滤波强度越强,也可能会导致失去真实信号,为0时没有滤波效果。 + 滤波后的数据值 + + + + 离散傅氏变换的快速算法,处理的信号,适合单周期信号数为2的N次方个,支持变换及逆变换 + + + + + + + + + + + + + 快速傅立叶变换 + + 实数部分 + 变换后的数组值 + + + + 获取FFT变换后的显示图形,需要指定图形的相关参数 + + 实数部分的值 + 图形的宽度 + 图形的高度 + 线条颜色 + 是否开两次根,显示的噪点信息会更新明显 + 等待呈现的图形 + + .net standrard2.0 下不支持。 + + + + + 快速傅立叶变换 + + 实数部分,数组长度最好为2的n次方 + 虚数部分,数组长度最好为2的n次方 + 是否开两次根,显示的噪点信息会更新明显 + 变换后的数组值 + + + + 快速傅立叶变换 + + 实数部分,数组长度最好为2的n次方 + 虚数部分,数组长度最好为2的n次方 + 变换后的数组值 + + + + 快速傅立叶变换 + + 实数部分,数组长度最好为2的n次方 + 虚数部分,数组长度最好为2的n次方 + 变换后的数组值 + + + + 快速傅立叶变换的逆变换 + + 实数部分,数组长度最好为2的n次方 + 虚数部分,数组长度最好为2的n次方 + 2的多少次方 + + + + 快速傅立叶变换的逆变换 + + 实数部分,数组长度最好为2的n次方 + 虚数部分,数组长度最好为2的n次方 + 2的多少次方 + + + + 一个PID的辅助类,可以设置 P,I,D 三者的值,用来模拟信号波动的时候,信号的收敛情况 + + + + + 实例化一个默认的对象 + + + + + 初始化PID的数据信息 + + + + + -rando + 比例的参数信息 + + + + + 积分的参数信息 + + + + + 微分的参数信息 + + + + + 获取或设置死区的值 + + + + + 获取或设置输出的上限,默认为没有设置 + + + + + 获取或设置输出的下限,默认为没有设置 + + + + + 获取或设置当前设置的值 + + + + + 计算Pid数据的值 + + 计算值 + + + + Pid的模式选择 + + + + + 增量模式 + + + + + 一个连接池管理器,负责维护多个可用的连接,并且自动清理,扩容,用于快速读写服务器或是PLC时使用。
+ A connection pool manager is responsible for maintaining multiple available connections, + and automatically cleans up, expands, and is used to quickly read and write servers or PLCs. +
+ 管理的连接类,需要支持IConnector接口 + + 需要先实现 接口的对象,然后就可以实现真正的连接池了,理论上可以实现任意的连接对象,包括modbus连接对象,各种PLC连接对象,数据库连接对象,redis连接对象,SimplifyNet连接对象等等。下面的示例就是modbus-tcp的实现 + 要想真正的支持连接池访问,还需要服务器支持一个端口的多连接操作,三菱PLC的端口就不支持,如果要测试示例代码的连接池对象,需要使用本组件的来创建服务器对象 + + + 下面举例实现一个modbus的连接池对象,先实现接口化的操作 + + 然后就可以实现真正的连接池了 + + +
+ + + 实例化一个连接池对象,需要指定如果创建新实例的方法
+ To instantiate a connection pool object, you need to specify how to create a new instance +
+ 创建连接对象的委托 +
+ + + 获取一个可用的连接对象,如果已经达到上限,就进行阻塞等待。当使用完连接对象的时候,需要调用方法归还连接对象。
+ Get an available connection object, if the upper limit has been reached, block waiting. When the connection object is used up, + you need to call the method to return the connection object. +
+ 可用的连接对象 +
+ + + 使用完之后需要通知连接池的管理器,本方法调用之前需要获取到连接对象信息。
+ After using it, you need to notify the manager of the connection pool, and you need to get the connection object information before calling this method. +
+ 连接对象 +
+ + + 将目前连接中的所有对象进行关闭,然后移除队列。
+ Close all objects in the current connection, and then remove the queue. +
+
+ + + 获取或设置最大的连接数,当实际的连接数超过最大的连接数的时候,就会进行阻塞,直到有新的连接对象为止。
+ Get or set the maximum number of connections. When the actual number of connections exceeds the maximum number of connections, + it will block until there is a new connection object. +
+
+ + + 获取或设置当前连接过期的时间,单位秒,默认30秒,也就是说,当前的连接在设置的时间段内未被使用,就进行释放连接,减少内存消耗。
+ Get or set the expiration time of the current connection, in seconds, the default is 30 seconds, that is, + if the current connection is not used within the set time period, the connection will be released to reduce memory consumption. +
+
+ + + 当前已经使用的连接数,会根据使用的频繁程度进行动态的变化。
+ The number of currently used connections will dynamically change according to the frequency of use. +
+
+ + + 当前已经使用的连接数的峰值,可以用来衡量当前系统的适用的连接池上限。
+ The current peak value of the number of connections used can be used to measure the upper limit of the applicable connection pool of the current system. +
+
+ + + 连接池的接口,连接池的管理对象必须实现此接口 + + 为了使用完整的连接池功能,需要先实现本接口,然后配合来使用 + + 下面举例实现一个modbus的连接池对象 + + + + + + 指示当前的连接是否在使用用 + + + + + 唯一的GUID码 + + + + + 最新一次使用的时间 + + + + + 打开连接 + + + + + 关闭并释放 + + + + + 系统的基本授权类 + + + + + 普通VIP的授权的判定 + + 是否授权成功 + + + + 商业授权则返回true,否则返回false + + 是否成功进行商业授权 + + + + 通过指定的IP地址,端口号信息的接口服务器获取密钥,然后进行激活,适用局域网内一个主服务对其他电脑的激活操作。如果网络失败或是密钥不正确,则激活失败。
+ The interface server obtains the key through the specified IP address and port number information, and then activates it, + which applies to the activation operation of one main service in the LAN to other computers. If the network fails or the key is incorrect, activation fails. +
+ 远程的IP地址信息 + 远程的端口号信息 + 令牌信息,不是必须的,具体取决于服务器作用 + 是否激活成功 +
+ + + 设置本组件激活失败的情况时候的联系方式,可以设置成自定义的字符串,当且仅当企业用户激活成功后调用本方法有效,如果不设置默认为:联系QQ200962190,微信:13516702732,Email:hsl200909@163.com
+ Set the contact information when the activation of this component fails, can be set to a custom string, + if and only if the enterprise user activation is successful to call this method is valid, if not set the default is: contact QQ200962190, WeChat: 13516702732,Email:hsl200909@163.com +
+ 新的联系方式 +
+ + + 设置本组件系统的授权信息,如果激活失败,只能使用24小时,24小时后所有的网络通信不会成功
+ Set the authorization information of this component system. If the activation fails, it can only be used for 8 hours. All network communication will not succeed after 8 hours +
+ 授权码,如果授权码为空,则使用在线激活的方式 + 是否激活成功 +
+ + + 使用证书激活hslcommunication组件,证书请联系胡工科技获取,如果获取的是文件的话,那就是 SetHslCertificate( File.ReadAllBytes( "hsl.cert" ) ) 获取原始字节信息
+ Use the certificate to activate the hslcommunication component, please contact Hugong Technology to obtain the certificate, if the obtained is a file, + that is, SetHslCertificate( File.ReadAllBytes( "hsl.cert") ) to obtain the raw byte information +
+ 证书信息 + 是否激活成功 +
+ + + 一个高效的数组管理类,用于高效控制固定长度的数组实现
+ An efficient array management class for efficient control of fixed-length array implementations +
+ 泛型类型 +
+ + + 实例化一个对象,需要指定数组的最大数据对象 + + 数据的个数 + 是否从最后一个数添加 + + + + 获取数组的个数
+ Get the number of arrays +
+
+ + + 新增一个数据值
+ Add a data value +
+ 数据值 +
+ + + 批量的增加数据
+ Increase data in batches +
+ 批量数据信息 +
+ + + 获取数据的数组值
+ Get array value of data +
+ 数组值 +
+ + + 获取或设置指定索引的位置的数据
+ Gets or sets the data at the specified index +
+ 索引位置 + 数据值 +
+ + + 获取最后一个值,如果从来没有添加过,则引发异常
+ Gets the last value and throws an exception if it has never been added +
+ 值信息 +
+ + + + + + 用来测试版软件授权的窗口 + + + + + 实例化授权注册窗口 + + + 提示关于怎么获取注册码的信息 + 加密的方法 + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + 一个用于消息弹出显示的类 + + + + + 新增一个显示的弹出窗口 + + + + + + 重置所有弹出窗口的位置 + + + + + 实例化一个窗口信息弹出的对象 + + + + + 实例化一个窗口信息弹出的对象 + + 需要显示的文本 + + + + 实例化一个窗口信息弹出的对象 + + 需要显示的文本 + 文本的颜色 + + + + 实例化一个窗口信息弹出的对象 + + 需要显示的文本 + 文本的颜色 + 指定窗口多少时间后消失,单位毫秒 + + + + 窗体的位置进行向上调整 + + + + + 窗体的位置进行向上调整 + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + 一个正方形图形选择窗口,可以获取指定的分辨率 + + + + + 实例化一个对象 + + + + + 是否有图片存在 + + + + + 已选择的图形大小 + + + + + 在控件显示的图片的大小,按照比例缩放以后 + + + + + 增加一张图片的路径 + + + + + + 获取指定大小的图片,该图片将会按照比例压缩 + + 图片的横向分辨率 + 缩放后的图形 + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + 作者的技术支持的窗口界面 + + + + + 实例化一个默认的界面 + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + 系统框架支持的一些常用的动画特效 + + + + + 最小的时间片段 + + + + + 调整控件背景色,采用了线性的颜色插补方式,实现了控件的背景色渐变,需要指定控件,颜色,以及渐变的时间 + + 控件 + 设置的颜色 + 时间 + + + + 软件授权类 + + + + + 实例化一个软件授权类 + + 是否使用管理员模式 + + + + 注册码描述文本 + + + + + 最终的注册秘钥信息,注意是只读的。 + + + 时间:2018年9月1日 23:01:54,来自 洛阳-LYG 的建议,公开了本属性信息,只读。 + + + + + 是否正式发行版,是的话就取消授权 + + + + + 指示是否加载过文件信息 + + + + + 指示系统是否处于试用运行 + + + + + 获取本机的机器码 + + 机器码字符串 + + + + 获取需要保存的数据内容 + + 实际保存的内容 + + + + 从字符串加载数据 + + 文件存储的数据 + + + + 使用特殊加密算法加密数据 + + + + + 使用特殊解密算法解密数据 + + + + + 检查该注册码是否是正确的注册码 + + 注册码信息 + 数据加密的方法,必须用户指定 + 是否注册成功 + + + + 检测授权是否成功 + + 数据加密的方法,必须用户指定 + 是否成功授权 + + + + 获取本计算机唯一的机器码 + + 字符串形式的机器码 + + + + 获得硬盘信息 + + 硬盘序号 + 硬盘信息 + + by sunmast for everyone + thanks lu0 for his great works + 在Windows Array8/ME中,S.M.A.R.T并不缺省安装,请将SMARTVSD.VXD拷贝到%SYSTEM%\IOSUBSYS目录下。 + 在Windows 2000/2003下,需要Administrators组的权限。 + + + AtapiDevice.GetHddInfo() + + + + + 执行打开/建立资源的功能。 + + 指定要打开的设备或文件的名称。 + + Win32 常量,用于控制对设备的读访问、写访问或读/写访问的常数。内容如下表: +

+ + 名称 + 说明 + + + GENERIC_READ指定对设备进行读取访问。 + + + GENERIC_WRITE指定对设备进行写访问。 + + 0如果值为零,则表示只允许获取与一个设备有关的信息。 +

+
+ + 指定打开设备时的文件共享模式 + + Win32 常量,指定操作系统打开文件的方式。内容如下表: +

+ + 名称说明 + + CREATE_NEW + 指定操作系统应创建新文件。如果文件存在,则抛出 异常。 + + CREATE_ALWAYS指定操作系统应创建新文件。如果文件已存在,它将被改写。 + +

+ + + + 使用函数打开的设备的句柄。 + + 本函数可以执行打开或建立文件、文件流、目录/文件夹、物理磁盘、卷、系统控制的缓冲区、磁带设备、 + 通信资源、邮件系统和命名管道。 + +
+ + + 关闭一个指定的指针对象指向的设备。。 + + 要关闭的句柄 对象。 + 成功返回 0 ,不成功返回非零值。 + + + + 对设备执行指定的操作。 + + 要执行操作的设备句柄。 + Win32 API 常数,输入的是以 FSCTL_ 为前缀的常数,定义在 + WinIoCtl.h 文件内,执行此重载方法必须输入 SMART_GET_VERSION 。 + 当参数为指针时,默认的输入值是 0 。 + 输入缓冲区的字节数量。 + 一个 GetVersionOutParams ,表示执行函数后输出的设备检查。 + 输出缓冲区的字节数量。 + 实际装载到输出缓冲区的字节数量。 + 同步操作控制,一般不使用,默认值为 0 。 + 非零表示成功,零表示失败。 + + + + 对设备执行指定的操作。 + + 要执行操作的设备句柄。 + Win32 API 常数,输入的是以 FSCTL_ 为前缀的常数,定义在 + WinIoCtl.h 文件内,执行此重载方法必须输入 SMART_SEND_DRIVE_COMMANDSMART_RCV_DRIVE_DATA 。 + 一个 SendCmdInParams 结构,它保存向系统发送的查询要求具体命令的数据结构。 + 输入缓冲区的字节数量。 + 一个 SendCmdOutParams 结构,它保存系统根据命令返回的设备相信信息二进制数据。 + 输出缓冲区的字节数量。 + 实际装载到输出缓冲区的字节数量。 + 同步操作控制,一般不使用,默认值为 0 。 + 非零表示成功,零表示失败。 + + + + 硬盘信息 + + + + + 型号 + + + + + 固件版本 + + + + + 序列号 + + + + + 容量,以M为单位 + + + + + 支持字符串信息加载存储的接口,定义了几个通用的方法 + + + + + 获取需要保存的数据,需要重写实现 + + 需要存储的信息 + + + + 从字符串加载数据,需要重写实现 + + 字符串数据 + + + + 不使用解密方法从文件读取数据 + + + + + 不使用加密方法保存数据到文件 + + + + + 文件路径的存储 + + + + + 文件存储功能的基类,包含了文件存储路径,存储方法等 + + + 需要继承才能实现你想存储的数据,比较经典的例子就是存储你的应用程序的配置信息,通常的格式就是xml文件或是json文件。具体请看例子: + + + 下面举例实现两个字段的普通数据存储 + + 然后怎么调用呢? + + 如果你想实现加密存储,这样就不用关心被用户看到了。 + + 如果还是担心被反编译获取数据,那么这个密钥就要来自服务器的数据,本地不做存储。 + + + + + 实例化一个文件存储的基类 + + + + + 在日志保存时的标记当前调用类的信息 + + + + + + + + + + + + + + 使用用户自定义的解密方法从文件读取数据 + + 用户自定义的解密方法 + + + + + + + 使用用户自定义的加密方法保存数据到文件 + + 用户自定义的加密方法 + + + + 文件存储的路径 + + + + + 日志记录类 + + + + + 一个软件基础类,提供常用的一些静态方法,比如字符串转换,字节转换的方法
+ A software-based class that provides some common static methods,Such as string conversion, byte conversion method +
+
+ + + 获取文件的md5码
+ Get the MD5 code of the file +
+ 文件的路径,既可以是完整的路径,也可以是相对的路径 -> The path to the file + Md5字符串 + + 下面举例实现获取一个文件的md5码 + + +
+ + + 获取数据流的md5码
+ Get the MD5 code for the data stream +
+ 数据流,可以是内存流,也可以是文件流 + Md5字符串 + + 下面举例实现获取一个流的md5码 + + +
+ + + 获取文本字符串信息的Md5码,编码为UTF8
+ Get the Md5 code of the text string information, using the utf-8 encoding +
+ 文本数据信息 + Md5字符串 +
+ + + 获取文本字符串信息的Md5码,使用指定的编码
+ Get the Md5 code of the text string information, using the specified encoding +
+ 文本数据信息 + 编码信息 + Md5字符串 +
+ + + 获取内存图片的md5码
+ Get the MD5 code of the memory picture +
+ 内存图片 + Md5字符串 + + 下面举例实现获取一个图像的md5码 + + +
+ + + 从一个字节大小返回带单位的描述,主要是用于显示操作
+ Returns a description with units from a byte size, mainly for display operations +
+ 实际的大小值 + 最终的字符串值 + + 比如说我们获取了文件的长度,这个长度可以来自于本地,也可以来自于数据库查询 + + +
+ + + 从一个时间差返回带单位的描述,主要是用于显示操作。
+ Returns a description with units from a time difference, mainly for display operations. +
+ 实际的时间差 + 最终的字符串值 + + 比如说我们获取了一个时间差信息 + + +
+ + + 将数组格式化为显示的字符串的信息,支持所有的类型对象
+ Formats the array into the displayed string information, supporting all types of objects +
+ 数组的类型 + 数组信息 + 最终显示的信息 +
+ + + 将数组格式化为显示的字符串的信息,支持所有的类型对象
+ Formats the array into the displayed string information, supporting all types of objects +
+ 数组的类型 + 数组信息 + 格式化的信息 + 最终显示的信息 +
+ + + 将数组格式化为显示的字符串的信息,支持所有的类型对象
+ Formats the array into the displayed string information, supporting all types of objects +
+ 数组的类型 + 数组信息 + 最终显示的信息 +
+ + + 将数组格式化为显示的字符串的信息,支持所有的类型对象
+ Formats the array into the displayed string information, supporting all types of objects +
+ 数组的类型 + 数组信息 + 格式化的信息 + 最终显示的信息 +
+ + + 一个通用的数组新增个数方法,会自动判断越界情况,越界的情况下,会自动的截断或是填充
+ A common array of new methods, will automatically determine the cross-border situation, in the case of cross-border, will be automatically truncated or filled +
+ 数据类型 + 原数据 + 等待新增的数据 + 原数据的最大值 + + + +
+ + + 将一个数组进行扩充到指定长度,或是缩短到指定长度
+ Extend an array to a specified length, or shorten to a specified length or fill +
+ 数组的类型 + 原先数据的数据 + 新数组的长度 + 新数组长度信息 + + + +
+ + + 将一个数组进行扩充到偶数长度
+ Extend an array to even lengths +
+ 数组的类型 + 原先数据的数据 + 新数组长度信息 + + + +
+ + + 将指定的数据按照指定长度进行分割,例如int[10],指定长度4,就分割成int[4],int[4],int[2],然后拼接list
+ Divide the specified data according to the specified length, such as int [10], and specify the length of 4 to divide into int [4], int [4], int [2], and then concatenate the list +
+ 数组的类型 + 等待分割的数组 + 指定的长度信息 + 分割后结果内容 + + + +
+ + + 将整数进行有效的拆分成数组,指定每个元素的最大值
+ Effectively split integers into arrays, specifying the maximum value for each element +
+ 整数信息 + 单个的数组长度 + 拆分后的数组长度 + + + +
+ + + 判断两个字节的指定部分是否相同
+ Determines whether the specified portion of a two-byte is the same +
+ 第一个字节 + 第一个字节的起始位置 + 第二个字节 + 第二个字节的起始位置 + 校验的长度 + 返回是否相等 + + + + +
+ + + 判断两个字节的指定部分是否相同
+ Determines whether the specified portion of a two-byte is the same +
+ 第一个字节 + 第二个字节 + 返回是否相等 + + + +
+ + + 判断两个数据的令牌是否相等
+ Determines whether the tokens of two data are equal +
+ 字节数据 + GUID数据 + 返回是否相等 + + + +
+ + + 判断两个数据的令牌是否相等
+ Determines whether the tokens of two data are equal +
+ 第一个令牌 + 第二个令牌 + 返回是否相等 +
+ + + 获取一个枚举类型的所有枚举值,可直接应用于组合框数据
+ Gets all the enumeration values of an enumeration type that can be applied directly to the combo box data +
+ 枚举的类型值 + 枚举值数组 + + + +
+ + + 从字符串的枚举值数据转换成真实的枚举值数据
+ Convert enumeration value data from strings to real enumeration value data +
+ 枚举的类型值 + 枚举的字符串的数据值 + 真实的枚举值 + + + +
+ + + 一个泛型方法,提供json对象的数据读取
+ A generic method that provides data read for a JSON object +
+ 读取的泛型 + json对象 + 值名称 + 默认值 + 值对象 + + + +
+ + + 一个泛型方法,提供json对象的数据写入
+ A generic method that provides data writing to a JSON object +
+ 写入的泛型 + json对象 + 值名称 + 值数据 + + + +
+ + + 一个泛型的方法,提供XML对象的数据读取为实际的数据,支持BCL的基础类型。
+ A generic method that provides data for XML objects to be read as actual data, supporting the underlying types of BCL. +
+ 类型对象 + 元素信息 + 属性的名称 + 默认值信息 + 解析后的值 + 解析失败的异常 +
+ + + 显示一个完整的错误信息
+ Displays a complete error message +
+ 异常对象 + 调用本方法可以显示一个异常的详细信息 + +
+ + + 显示一个完整的错误信息,和额外的字符串描述信息
+ Displays a complete error message, and additional string description information +
+ 额外的描述信息 + 调用本方法可以显示一个异常的详细信息 + 异常对象 + +
+ + + 获取一个异常的完整错误信息
+ Gets the complete error message for an exception +
+ 异常对象 + 完整的字符串数据 + 获取异常的完整信息 + ex不能为空 + + + +
+ + + 获取一个异常的完整错误信息,和额外的字符串描述信息
+ Gets the complete error message for an exception, and additional string description information +
+ 额外的信息 + 异常对象 + 完整的字符串数据 + + + + +
+ + + 字节数据转化成16进制表示的字符串
+ Byte data into a string of 16 binary representations +
+ 字节数组 + 返回的字符串 + + + +
+ + + 字节数据转化成16进制表示的字符串
+ Byte data into a string of 16 binary representations +
+ 字节数组 + 分割符 + 返回的字符串 + + + +
+ + + 字节数据转化成16进制表示的字符串
+ Byte data into a string of 16 binary representations +
+ 字节数组 + 分割符,如果设置为0,则没有分隔符信息 + 每隔指定数量的时候进行换行,如果小于等于0,则不进行分行显示 + 格式信息,默认为{0:X2} + 返回的字符串 + + + +
+ + + 字符串数据转化成16进制表示的字符串
+ String data into a string of 16 binary representations +
+ 输入的字符串数据 + 返回的字符串 + +
+ + + 将16进制的字符串转化成Byte数据,将检测每2个字符转化,也就是说,中间可以是任意字符
+ Converts a 16-character string into byte data, which will detect every 2 characters converted, that is, the middle can be any character +
+ 十六进制的字符串,中间可以是任意的分隔符 + 转换后的字节数组 + 参数举例:AA 01 34 A8 + + + +
+ + + 将byte数组按照双字节进行反转,如果为单数的情况,则自动补齐
+ Reverses the byte array by double byte, or if the singular is the case, automatically +
+ + 例如传入的字节数据是 01 02 03 04, 那么反转后就是 02 01 04 03 + + 输入的字节信息 + 反转后的数据 + + + +
+ + + 将字节数组显示为ASCII格式的字符串,当遇到0x20以下及0x7E以上的不可见字符时,使用十六进制的数据显示
+ Display the byte array as a string in ASCII format, when encountering invisible characters below 0x20 and above 0x7E, use hexadecimal data to display
+
+ 字节数组信息 + ASCII格式的字符串信息 +
+ + + 从显示的ASCII格式的字符串,转为原始字节数组,如果遇到 \00 这种表示原始字节的内容,则直接进行转换操作,遇到 \r 直接转换 0x0D, \n 直接转换 0x0A
+ Convert from the displayed string in ASCII format to the original byte array. If you encounter \00, which represents the original byte content, + the conversion operation is performed directly. When encountering \r, it is directly converted to 0x0D, and \n is directly converted to 0x0A. +
+ 等待转换的字符串 + 原始字节数组 +
+ + + 将原始的byte数组转换成ascii格式的byte数组
+ Converts the original byte array to an ASCII-formatted byte array +
+ 等待转换的byte数组 + 转换后的数组 +
+ + + 将ascii格式的byte数组转换成原始的byte数组
+ Converts an ASCII-formatted byte array to the original byte array +
+ 等待转换的byte数组 + 转换后的数组 +
+ + + 从字节构建一个ASCII格式的数据内容
+ Build an ASCII-formatted data content from bytes +
+ 数据 + ASCII格式的字节数组 +
+ + + 从short构建一个ASCII格式的数据内容
+ Constructing an ASCII-formatted data content from a short +
+ 数据 + ASCII格式的字节数组 +
+ + + 从ushort构建一个ASCII格式的数据内容
+ Constructing an ASCII-formatted data content from ushort +
+ 数据 + ASCII格式的字节数组 +
+ + + 从uint构建一个ASCII格式的数据内容
+ Constructing an ASCII-formatted data content from uint +
+ 数据 + ASCII格式的字节数组 +
+ + + 从字节数组构建一个ASCII格式的数据内容
+ Byte array to construct an ASCII format data content +
+ 字节信息 + ASCII格式的地址 +
+ + + 获取byte数据类型的第offset位,是否为True
+ Gets the index bit of the byte data type, whether it is True +
+ byte数值 + 索引位置 + 结果 + + + +
+ + + 设置取byte数据类型的第offset位,是否为True
+ Set the offset bit of the byte data type, whether it is True +
+ byte数值 + 索引位置 + 写入的结果值 + 结果 + + + +
+ + + 将bool数组转换到byte数组
+ Converting a bool array to a byte array +
+ bool数组 + 转换后的字节数组 + + + +
+ + + 将bool数组转换为字符串进行显示,true被转为1,false转换为0
+ Convert the bool array to a string for display, true is converted to 1, false is converted to 0 +
+ bool数组 + 转换后的字符串 +
+ + + 从Byte数组中提取位数组,length代表位数
+ Extracts a bit array from a byte array, length represents the number of digits +
+ 原先的字节数组 + 想要转换的长度,如果超出自动会缩小到数组最大长度 + 转换后的bool数组 + + + +
+ + + 从Byte数组中提取所有的位数组
+ Extracts a bit array from a byte array, length represents the number of digits +
+ 原先的字节数组 + 转换后的bool数组 + + + +
+ + + 将一个数组的前后移除指定位数,返回新的一个数组
+ Removes a array before and after the specified number of bits, returning a new array +
+ 数组 + 前面的位数 + 后面的位数 + 新的数组 + + + + +
+ + + 将一个数组的前面指定位数移除,返回新的一个数组
+ Removes the preceding specified number of bits in a array, returning a new array +
+ 数组 + 等待移除的长度 + 新的数组 + + + + +
+ + + 将一个数组的后面指定位数移除,返回新的一个数组
+ Removes the specified number of digits after a array, returning a new array +
+ 数组 + 等待移除的长度 + 新的数组 + + + + +
+ + + 获取到数组里面的中间指定长度的数组
+ Get an array of the specified length in the array +
+ 数组 + 起始索引 + 数据的长度 + 新的数组值 + + + + +
+ + + 选择一个数组的前面的几个数据信息
+ Select the begin few items of data information of a array +
+ 数组 + 数据的长度 + 新的数组 + + + +
+ + + 选择一个数组的后面的几个数据信息
+ Select the last few items of data information of a array +
+ 数组 + 数据的长度 + 新的数组信息 + + + +
+ + + 拼接任意个泛型数组为一个总的泛型数组对象,采用深度拷贝实现。
+ Splicing any number of generic arrays into a total generic array object is implemented using deep copy. +
+ 数组的类型信息 + 任意个长度的数组 + 拼接之后的最终的结果对象 + + + +
+ + + 将一个的数组和多个 类型的对象整合成一个数组
+ Combine an array of and multiple objects of type into an array +
+ 第一个数组对象 + 字符串数组信息 + 总的数组对象 +
+ + + 将两个的数组和多个 类型的对象整合成一个数组
+ Combine two arrays of and multiple objects of type into one array +
+ 第一个数据对象 + 第二个数据对象 + 字符串数组信息 + 总的数组对象 +
+ + + 将两个的数组和多个 类型的对象整合成一个数组
+ Combine two arrays of and multiple objects of type into one array +
+ 第一个数据对象 + 第二个数据对象 + 第三个数据对象 + 字符串数组信息 + 总的数组对象 +
+ + + 将字符串编码为URL可以识别的字符串,中文会被编码为%开头的数据,例如 中文 转义为 %2F%E4%B8%AD%E6%96%87
+ Encoding a string as a URL-recognizable string Chinese encoded as data that begins with %, such as 中文 escaped as %2F%E4%B8%AD%E6%96%87 +
+ 等待转换的字符串数据 + 编码信息,一般为 UTF8 + 编码之后的结果 +
+ + + 将url的编码解码为真实的字符串,例如 %2F%E4%B8%AD%E6%96%87 解码为 中文
+ Decode the encoding of url as a real string, for example %2F%E4%B8%AD%E6%96%87 to 中文 +
+ 等待转换的值 + 编码信息,一般为 UTF8 + 解码之后的结果 +
+ + + 设置或获取系统框架的版本号
+ Set or get the version number of the system framework +
+ + 当你要显示本组件框架的版本号的时候,就可以用这个属性来显示 + +
+ + + 使用序列化反序列化深度克隆一个对象,该对象需要支持序列化特性
+ Cloning an object with serialization deserialization depth that requires support for serialization attributes +
+ 源对象,支持序列化 + 新的一个实例化的对象 + + + + + 参数必须实现序列化的特性 + + + + + +
+ + + 获取一串唯一的随机字符串,长度为20,由Guid码和4位数的随机数组成,保证字符串的唯一性
+ Gets a string of unique random strings with a length of 20, consisting of a GUID code and a 4-digit random number to guarantee the uniqueness of the string +
+ 随机字符串数据 + + + +
+ + + 一个线程安全的缓存数据块,支持批量动态修改,添加,并获取快照
+ A thread-safe cache data block that supports batch dynamic modification, addition, and snapshot acquisition +
+ + 这个类可以实现什么功能呢,就是你有一个大的数组,作为你的应用程序的中间数据池,允许你往byte[]数组里存放指定长度的子byte[]数组,也允许从里面拿数据, + 这些操作都是线程安全的,当然,本类扩展了一些额外的方法支持,也可以直接赋值或获取基本的数据类型对象。 + + + 此处举例一些数据的读写说明,可以此处的数据示例。 + + +
+ + + 使用默认的大小初始化缓存空间
+ Initialize cache space with default size +
+
+ + + 使用指定的容量初始化缓存数据块
+ Initialize the cache data block with the specified capacity +
+ 初始化的容量 +
+ + + 设置指定的位置bool值,如果超出,则丢弃数据,该位置是指按照位为单位排序的
+ Set the bool value at the specified position, if it is exceeded, + the data is discarded, the position refers to sorting in units of bits +
+ bool值 + 目标存储的索引 + +
+ + + 设置指定的位置的bool数组,如果超出,则丢弃数据,该位置是指按照位为单位排序的
+ Set the bool array at the specified position, if it is exceeded, + the data is discarded, the position refers to sorting in units of bits +
+ bool数组值 + 目标存储的索引 + +
+ + + 获取指定的位置的bool值,如果超出,则引发异常
+ Get the bool value at the specified position, if it exceeds, an exception is thrown +
+ 目标存储的索引 + 获取索引位置的bool数据值 + +
+ + + 获取指定位置的bool数组值,如果超过,则引发异常
+ Get the bool array value at the specified position, if it exceeds, an exception is thrown +
+ 目标存储的索引 + 读取的数组长度 + + bool数组值 +
+ + + 设置指定的位置的数据块,如果超出,则丢弃数据
+ Set the data block at the specified position, if it is exceeded, the data is discarded +
+ 数据块信息 + 目标存储的索引 +
+ + + 设置指定的位置的数据块,如果超出,则丢弃数据 + Set the data block at the specified position, if it is exceeded, the data is discarded + + 数据块信息 + 目标存储的索引 + 准备拷贝的数据长度 + + + + 设置指定的位置的数据块,如果超出,则丢弃数据
+ Set the data block at the specified position, if it is exceeded, the data is discarded +
+ 数据块信息 + Data中的起始位置 + 目标存储的索引 + 准备拷贝的数据长度 + +
+ + + 获取内存指定长度的数据信息
+ Get data information of specified length in memory +
+ 起始位置 + 数组长度 + 返回实际的数据信息 +
+ + + 获取内存所有的数据信息
+ Get all data information in memory +
+ 实际的数据信息 +
+ + + 设置byte类型的数据到缓存区
+ Set byte type data to the cache area +
+ byte数值 + 索引位置 +
+ + + 设置short数组的数据到缓存区
+ Set short array data to the cache area +
+ short数组 + 索引位置 +
+ + + 设置short类型的数据到缓存区
+ Set short type data to the cache area +
+ short数值 + 索引位置 +
+ + + 设置ushort数组的数据到缓存区
+ Set ushort array data to the cache area +
+ ushort数组 + 索引位置 +
+ + + 设置ushort类型的数据到缓存区
+ Set ushort type data to the cache area +
+ ushort数值 + 索引位置 +
+ + + 设置int数组的数据到缓存区
+ Set int array data to the cache area +
+ int数组 + 索引位置 +
+ + + 设置int类型的数据到缓存区
+ Set int type data to the cache area +
+ int数值 + 索引位置 +
+ + + 设置uint数组的数据到缓存区
+ Set uint array data to the cache area +
+ uint数组 + 索引位置 +
+ + + 设置uint类型的数据到缓存区
+ Set uint byte data to the cache area +
+ uint数值 + 索引位置 +
+ + + 设置float数组的数据到缓存区
+ Set float array data to the cache area +
+ float数组 + 索引位置 +
+ + + 设置float类型的数据到缓存区
+ Set float type data to the cache area +
+ float数值 + 索引位置 +
+ + + 设置long数组的数据到缓存区
+ Set long array data to the cache area +
+ long数组 + 索引位置 +
+ + + 设置long类型的数据到缓存区
+ Set long type data to the cache area +
+ long数值 + 索引位置 +
+ + + 设置ulong数组的数据到缓存区
+ Set long array data to the cache area +
+ ulong数组 + 索引位置 +
+ + + 设置ulong类型的数据到缓存区
+ Set ulong byte data to the cache area +
+ ulong数值 + 索引位置 +
+ + + 设置double数组的数据到缓存区
+ Set double array data to the cache area +
+ double数组 + 索引位置 +
+ + + 设置double类型的数据到缓存区
+ Set double type data to the cache area +
+ double数值 + 索引位置 +
+ + + 获取byte类型的数据
+ Get byte data +
+ 索引位置 + byte数值 +
+ + + 获取short类型的数组到缓存区
+ Get short type array to cache +
+ 索引位置 + 数组长度 + short数组 +
+ + + 获取short类型的数据到缓存区
+ Get short data to the cache +
+ 索引位置 + short数据 +
+ + + 获取ushort类型的数组到缓存区
+ Get ushort type array to cache +
+ 索引位置 + 数组长度 + ushort数组 +
+ + + 获取ushort类型的数据到缓存区
+ Get ushort type data to cache +
+ 索引位置 + ushort数据 +
+ + + 获取int类型的数组到缓存区
+ Get int type array to cache +
+ 索引位置 + 数组长度 + int数组 +
+ + + 获取int类型的数据到缓存区
+ Get int type data to cache +
+ 索引位置 + int数据 +
+ + + 获取uint类型的数组到缓存区
+ Get uint type array to cache +
+ 索引位置 + 数组长度 + uint数组 +
+ + + 获取uint类型的数据到缓存区
+ Get uint type data to cache +
+ 索引位置 + uint数据 +
+ + + 获取float类型的数组到缓存区
+ Get float type array to cache +
+ 索引位置 + 数组长度 + float数组 +
+ + + 获取float类型的数据到缓存区
+ Get float type data to cache +
+ 索引位置 + float数据 +
+ + + 获取long类型的数组到缓存区
+ Get long type array to cache +
+ 索引位置 + 数组长度 + long数组 +
+ + + 获取long类型的数据到缓存区
+ Get long type data to cache +
+ 索引位置 + long数据 +
+ + + 获取ulong类型的数组到缓存区
+ Get ulong type array to cache +
+ 索引位置 + 数组长度 + ulong数组 +
+ + + 获取ulong类型的数据到缓存区
+ Get ulong type data to cache +
+ 索引位置 + ulong数据 +
+ + + 获取double类型的数组到缓存区
+ Get double type array to cache +
+ 索引位置 + 数组长度 + double数组 +
+ + + 获取double类型的数据到缓存区
+ Get double type data to cache +
+ 索引位置 + double数据 +
+ + + 读取自定义类型的数据,需要规定解析规则
+ Read custom types of data, need to specify the parsing rules +
+ 类型名称 + 起始索引 + 自定义的数据类型 +
+ + + 写入自定义类型的数据到缓存中去,需要规定生成字节的方法
+ Write custom type data to the cache, need to specify the method of generating bytes +
+ 自定义类型 + 实例对象 + 起始地址 +
+ + + + + + 获取或设置当前的bool操作是否按照字节反转
+ Gets or sets whether the current bool operation is reversed by bytes +
+
+ + + 释放当前的对象 + + + + + + + + + + + + 内存队列的基类 + + + + + 字节数据流 + + + + + 数据的长度 + + + + + 数据数组变动时的数据锁 + + + + + 用于从保存的数据对象初始化的 + + + + + + + 获取原本的数据字节 + + 字节数组 + + + + 一个内存队列缓存的类,数据类型为Int64 + + + + + 数据的本身面貌 + + + + + 实例化一个数据对象 + + + + + + + 用于从保存的数据对象初始化的 + + + + + + + 线程安全的添加数据 + + 值 + + + + 一个内存队列缓存的类,数据类型为Int32 + + + + + 数据的本身面貌 + + + + + 实例化一个数据对象 + + + + + + + 用于从保存的数据对象初始化的 + + + + + + + 线程安全的添加数据 + + 值 + + + + 安全的获取数组队列 + + + + + + 一个自定义的支持序列化反序列化的异常类,具体用法参照第四版《CLR Via C#》P414 + + 泛型异常 + + + + 用于反序列化的 + + + + + 消息 + + + + + 实例化一个异常对象 + + 消息 + 内部异常类 + + + + 实例化一个异常对象 + + 异常消息 + 消息 + 内部异常类 + + + + 获取存储对象的序列化数据 + + 序列化的信息 + 流的上下文 + + + + 获取描述当前异常的消息 + + + + + 确定指定的object是否等于当前的object + + 异常对象 + 是否一致 + + + + + + + 异常消息基类 + + + + + 携带的额外的消息类对象 + + + + + 软件的邮箱类,用于发送邮箱数据 + + + 如果您想实现自己的邮件发送中心,就可以去对应的邮件服务器注册,如果是想快速实现邮件的发送,本系统提供了2个静态的已经注册好了的邮箱发送器。 + + + 以下的代码演示了通过静态的发送对象来发送邮件,包含了发送普通的邮件,和发送html邮件。 + + + + + + 系统连续发送失败的次数,为了不影响系统,连续三次失败就禁止发送 + + + + + 系统提供一个默认的163邮箱发送账号,只要更改接收地址即可发送服务,可能会被拦截 + + + + + 系统提供一个默认的QQ邮箱发送账号,只要更改接收地址即可发送服务,发送成功概率比较高 + + + + + 实例化一个邮箱发送类,需要指定初始化信息 + + 初始化的方法 + 发送地址,应该和账户匹配 + 邮件接收地址 + + 初始化的方法比较复杂,需要参照示例代码。 + + + + + + + + 系统的邮件发送客户端 + + + + + 发送邮件的地址 + + + + + 邮件发送的地址 + + + + + 发生BUG至邮件地址,需要提前指定发送地址,否则失败 + + 异常的BUG,同样试用兼容类型 + 是否发送成功,内容不正确会被视为垃圾邮件 + + + + 发送邮件至地址,需要提前指定发送地址,否则失败 + + 邮件主题 + 邮件内容 + 是否发送成功,内容不正确会被视为垃圾邮件 + + + + 发送邮件至地址,需要提前指定发送地址,否则失败 + + 邮件主题 + 邮件内容 + 是否是html格式化文本 + 是否发送成功,内容不正确会被视为垃圾邮件 + + + + 发生BUG至邮件地址,需要提前指定发送地址,否则失败 + + 异常的BUG,同样试用兼容类型 + 额外信息 + 是否发送成功,内容不正确会被视为垃圾邮件 + + + + 发送邮件的方法,需要指定接收地址,主题及内容 + + 接收地址 + 邮件主题 + 邮件内容 + 是否发送成功,内容不正确会被视为垃圾邮件 + + + + 发送邮件的方法,默认发送别名,优先级,是否HTML + + 接收地址 + 邮件主题 + 邮件内容 + 是否是html格式的内容 + 是否发送成功,内容不正确会被视为垃圾邮件 + + + + 发送邮件的方法,需要提供完整的参数信息 + + 发送地址 + 发送别名 + 接收地址 + 邮件主题 + 邮件内容 + 优先级 + 邮件内容是否是HTML语言 + 发生是否成功,内容不正确会被视为垃圾邮件 + + + + 一个简单通用的消息队列 + + 类型 + + + + 实例化一个对象 + + + + + 所有临时存储的数据 + + + + + 临时消息存储的最大条数,必须大于10 + + + + + 获取最新添加进去的数据 + + + + + 将集合进行锁定 + + + + + 新增一条数据 + + + + + 获取存储字符串 + + + + + + 获取加载字符串 + + + + + + 系统的消息类,用来发送消息,和确认消息的 + + + + + 发送方名称 + + + + + 接收方名称 + + + + + 发送时间 + + + + + 发送的消息内容 + + + + + 消息是否已经被查看 + + + + + 一个用于自动流水号生成的类,必须指定保存的文件,实时保存来确认安全 + + + + 序号生成器软件,当获取序列号,清空序列号操作后,会自动的将ID号存储到本地的文件中,存储方式采用乐观并发模型实现。 + + + + 此处举个例子,也是Demo程序的源代码,包含了2个按钮的示例和瞬间调用100万次的性能示例。 + 百万次调用的实际耗时取决于计算机的性能,不同的计算机的表现存在差异,比如作者的:i5-4590cpu,内存ddr3-8G表示差不多在800毫秒左右 + + + + + + 实例化一个流水号生成的对象 + + 流水号的头文本 + 流水号带的时间信息 + 流水号数字的标准长度,不够补0 + 流水号存储的文本位置 + + + + 当前的生成序列号 + + + + + 流水号的文本头 + + + + + 时间格式默认年月日 + + + + + 流水号数字应该显示的长度 + + + + + 获取流水号的值 + + 字符串信息 + + + + 加载流水号 + + 源字符串信息 + + + + 清除流水号计数,进行重新计数 + + + + + 获取流水号数据 + + 新增计数后的信息 + + + + 获取流水号数据 + + 指定一个新的文本头 + 带头信息的计数后的信息 + + + + 单纯的获取数字形式的流水号 + + 新增计数后的信息 + + + + 高性能存储块 + + + + + 一个简单的不持久化的序号自增类,采用线程安全实现,并允许指定最大数字,将包含该最大值,到达后清空从指定数开始
+ A simple non-persistent serial number auto-increment class, which is implemented with thread safety, and allows the maximum number to be specified, which will contain the maximum number, and will be cleared from the specified number upon arrival. +
+ + 先来看看一个简单的应用的 + + 再来看看一些复杂的情况 + + 其他一些特殊的设定 + + +
+ + + 实例化一个自增信息的对象,包括最大值,初始值,增量值
+ Instantiate an object with incremental information, including the maximum value and initial value, IncreaseTick +
+ 数据的最大值,必须指定 + 数据的起始值,默认为0 + 每次的增量值 +
+ + + 获取自增信息,获得数据之后,下一次获取将会自增,如果自增后大于最大值,则会重置为最小值,如果小于最小值,则会重置为最大值。
+ Get the auto-increment information. After getting the data, the next acquisition will auto-increase. + If the auto-increment is greater than the maximum value, it will reset to the minimum value. + If the auto-increment is smaller than the minimum value, it will reset to the maximum value. +
+ 计数自增后的值 +
+ + + 重置当前序号的最大值,最大值应该大于初始值,如果当前值大于最大值,则当前值被重置为最大值
+ Reset the maximum value of the current serial number. The maximum value should be greater than the initial value. + If the current value is greater than the maximum value, the current value is reset to the maximum value. +
+ 最大值 +
+ + + 重置当前序号的初始值,需要小于最大值,如果当前值小于初始值,则当前值被重置为初始值。
+ To reset the initial value of the current serial number, it must be less than the maximum value. + If the current value is less than the initial value, the current value is reset to the initial value. +
+ 初始值 +
+ + + 将当前的值重置为初始值。
+ Reset the current value to the initial value. +
+
+ + + 将当前的值重置为指定值,该值不能大于max,如果大于max值,就会自动设置为max
+ Reset the current value to the specified value. The value cannot be greater than max. If it is greater than max, it will be automatically set to max. +
+ 指定的数据值 +
+ + + 增加的单元,如果设置为0,就是不增加。如果为小于0,那就是减少,会变成负数的可能。
+ Increased units, if set to 0, do not increase. If it is less than 0, it is a decrease and it may become a negative number. +
+
+ + + 获取当前的计数器的最大的设置值。
+ Get the maximum setting value of the current counter. +
+
+ + + + + + + + + 图形的方向 + + + + + 向上 + + + + + 向下 + + + + + 向左 + + + + + 向右 + + + + + 包含整型和字符串描述的数据类型 + + + + + 数量 + + + + + 描述 + + + + + 图形的呈现方式 + + + + + 直方图 + + + + + 饼图 + + + + + 折线图 + + + + + 静态类,包含了几个常用的画图方法,获取字符串,绘制小三角等 + + + + + 获取一个直方图 + + 数据数组 + 宽度 + 高度 + 刻度划分等级 + 线条颜色 + + + + + 计算绘图时的相对偏移值 + + 0-100分的最大值,就是指准备绘制的最大值 + 0-100分的最小值,就是指准备绘制的最小值 + 实际绘图区域的高度 + 需要绘制数据的当前值 + 相对于0的位置,还需要增加上面的偏值 + + + + 计算绘图时的相对偏移值 + + 0-100分的最大值,就是指准备绘制的最大值 + 0-100分的最小值,就是指准备绘制的最小值 + 实际绘图区域的高度 + 需要绘制数据的当前值 + 相对于0的位置,还需要增加上面的偏值 + + + + 绘制坐标系中的刻度线 + + + + + + + + + + + + + + + + + + + + 根据指定的方向绘制一个箭头 + + + + + + + + + + 根据数据生成一个可视化的图形 + + 数据集合 + 需要绘制图形的宽度 + 需要绘制图形的高度 + 指定绘制成什么样子的图形 + 返回一个bitmap对象 + + + + 字符串加密解密相关的自定义类 + + + + + 加密数据,采用DES对称加密的方式 + + 待加密的数据 + 加密后的数据 + + + + 加密数据,采用DES对称加密的方式 + + 待加密的数据 + 密钥,长度为8,英文或数字 + 加密后的数据 + + + + 解密过程,使用的是DES对称的加密 + + 等待解密的字符 + 返回原密码,如果解密失败,返回‘解密失败’ + + + + 解密过程,使用的是DES对称的加密 + + 等待解密的字符 + 密钥,长度为8,英文或数字 + 返回原密码,如果解密失败,返回‘解密失败’ + + + + 数据库操作的相关类,包含了常用的方法,避免大量的重复代码 + + + + + 普通的执行SQL语句,并返回影响行数,该方法应该放到try-catch代码块中 + + 数据库的连接字符串 + sql语句,适合插入,更新,删除 + 返回受影响的行数 + + + + + 普通的执行SQL语句,并返回影响行数,该方法应该放到try-catch代码块中 + + 数据库的连接对象 + sql语句,适合插入,更新,删除 + 返回受影响的行数 + + + + + 选择数据表的执行SQL语句,并返回最终数据表,该方法应该放到try-catch代码块中 + + 数据库的连接字符串 + sql语句,选择数据表的语句 + 结果数据表 + + + + + + 选择数据表的执行SQL语句,并返回最终数据表,该方法应该放到try-catch代码块中 + + 数据库连接对象 + sql语句,选择数据表的语句 + 结果数据表 + + + + + 选择指定类型数据集合执行SQL语句,并返回指定类型的数据集合,该方法应该放到try-catch代码块中 + + 数据库的连接字符串 + sql语句,选择数据表的语句 + 结果数据集合 + + + + + + 选择指定类型数据集合执行SQL语句,并返回指定类型的数据集合,该方法应该放到try-catch代码块中 + + 数据库的连接对象 + sql语句,选择数据表的语句 + 结果数据集合 + + + + + + 更新指定类型数据执行SQL语句,并返回指定类型的数据集合,该方法应该放到try-catch代码块中 + + 数据库的连接字符串 + sql语句,选择数据表的语句 + 结果数据 + + + + + + 更新指定类型数据执行SQL语句,并返回指定类型的数据集合,该方法应该放到try-catch代码块中 + + 数据库的连接对象 + sql语句,选择数据表的语句 + 结果数据 + + + + + + 用于选择聚合函数值的方法,例如Count,Average,Max,Min,Sum等最终只有一个结果值的对象 + + 数据库的连接字符串 + sql语句,选择数据表的语句 + 返回的int数据 + + + + 用于选择聚合函数值的方法,例如Count,Average,Max,Min,Sum等最终只有一个结果值的对象 + + 数据库的连接对象 + sql语句,选择数据表的语句 + 返回的int数据 + + + + 数据库对应类的读取接口 + + + + + 根据sdr对象初始化数据的方法 + + 数据库reader对象 + + + + 系统版本类,由三部分组成,包含了一个大版本,小版本,修订版,还有一个开发者维护的内部版
+ System version class, consisting of three parts, including a major version, minor version, revised version, and an internal version maintained by the developer +
+
+ + + 根据格式化字符串的版本号初始化,例如:1.0或1.0.0或1.0.0.0503
+ Initialize according to the version number of the formatted string, for example: 1.0 or 1.0.0 or 1.0.0.0503 +
+ 格式化的字符串,例如:1.0或1.0.0或1.0.0.0503 +
+ + + 根据指定的主版本,次版本,修订版来实例化一个对象
+ Instantiate an object based on the specified major, minor, and revision +
+ 主版本 + 次版本 + 修订版 +
+ + + 根据指定的主版本,次版本,修订版,内部版本来实例化一个对象
+ Instantiate an object based on the specified major, minor, revision, and build +
+ 主版本 + 次版本 + 修订版 + 内部版本号 +
+ + + 主版本 + + + + + 次版本 + + + + + 修订版 + + + + + 内部版本号,或者是版本号表示为年月份+内部版本的表示方式 + + + + + 根据格式化为支持返回的不同信息的版本号
+ C返回1.0.0.0
+ N返回1.0.0
+ S返回1.0 +
+ 格式化信息 + 版本号信息 +
+ + + 获取版本号的字符串形式,如果内部版本号为0,则显示时不携带 + + 版本号信息 + + + + 判断两个实例是否相等 + + 版本号 + 是否一致 + + + + 获取哈希值 + + 哈希值 + + + + 判断是否相等 + + 第一个版本 + 第二个版本 + 是否相同 + + + + 判断是否不相等 + + 第一个版本号 + 第二个版本号 + 是否相同 + + + + 判断一个版本是否大于另一个版本 + + 第一个版本 + 第二个版本 + 是否相同 + + + + 判断第一个版本是否小于第二个版本 + + 第一个版本号 + 第二个版本号 + 是否小于 + + + + 版本信息类,用于展示版本发布信息 + + + + + 版本的发行日期 + + + + + 版本的更新细节 + + + + + 版本号 + + + + + + + + 一个负责压缩解压数据字节的类 + + + + + 压缩字节数据 + + 等待被压缩的数据 + + 压缩之后的字节数据 + + + + 解压压缩后的数据 + + 压缩后的数据 + + 压缩前的原始字节数据 + + + + Fanuc床子的消息对象 + + + + + + + + + + + + + + CNC的运行状态 + + + + + 重置 + + + + + 停止 + + + + + 等待 + + + + + 启动 + + + + + MSTR + + + + + 设备的工作模式 + + + + + 手动输入 + + + + + 自动循环 + + + + + 程序编辑 + + + + + ×100 + + + + + 连续进给 + + + + + ??? + + + + + 示教 + + + + + ??? + + + + + 机床回零 + + + + + ??? + + + + + 刀具信息 + + + + + 长度形状补偿 + + + + + 长度磨损补偿 + + + + + 半径形状补偿 + + + + + 半径磨损补偿 + + + + + + + + Fanuc的系统信息 + + + + + 实例化一个空对象 + + + + + 使用缓存数据来实例化一个对象 + + 原始的字节信息 + + + + CNC的类型代号 + + + + + CNC的类型 + + + + + Kind of M/T, + + + + + 系列信息 + + + + + 版本号信息 + + + + + Current controlled axes + + + + + Fanuc机床的操作信息 + + + + + Number of operator's message + + + + + Kind of operator's message + + + + + Operator's message strings + + + + + 创建一个fanuc的操作消息对象 + + 数据变换对象 + 读取的数据缓存信息 + 解析的编码信息 + fanuc设备的操作信息 + + + + 文件或是文件夹的信息 + + + + + 实例化一个默认的对象 + + + + + 使用原始字节来实例化对象 + + 字节变换对象 + 原始的字节信息 + 起始的索引信息 + + + + 是否为文件夹,True就是文件夹,False就是文件 + + + + + 文件或是文件夹的名称 + + + + + 最后一次更新时间,当为文件的时候有效 + + + + + 文件的大小,当为文件的时候有效 + + + + + + + + 一个FANUC的机床通信类对象 + + + + + 根据IP及端口来实例化一个对象内容 + + Ip地址信息 + 端口号 + + + + + + + 获取或设置当前的文本的字符编码信息,如果你不清楚,可以调用方法来自动匹配。
+ Get or set the character encoding information of the current text. + If you are not sure, you can call the method to automatically match. +
+
+ + + 获取或设置当前操作的路径信息,默认为1,如果机床支持多路径的,可以设置为其他值。
+ Gets or sets the path information for the current operation, the default is 1, if the machine supports multipathing, it can be set to other values. +
+
+ + + + + + + + + + + + + + + 获取fanuc机床设备的基本信息,型号,轴数量等等。
+ Get basic information about fanuc machines, models, number of axes and much more +
+ 机床信息 +
+ + + 主轴转速及进给倍率
+ Spindle speed and feedrate override +
+ 主轴转速及进给倍率 +
+ + + 读取程序名及程序号
+ Read program name and program number +
+ 程序名及程序号 +
+ + + 读取机床的语言设定信息,具体值的含义参照API文档说明
+ Read the language setting information of the machine tool, refer to the API documentation for the meaning of the specific values +
+ 此处举几个常用值 0: 英语 1: 日语 2: 德语 3: 法语 4: 中文繁体 6: 韩语 15: 中文简体 16: 俄语 17: 土耳其语 + 返回的语言代号 +
+ + + 读取宏变量,可以用来读取刀具号
+ Read macro variable, can be used to read tool number +
+ 刀具号 + 读宏变量信息 +
+ + + 读取宏变量,可以用来读取刀具号
+ Read macro variable, can be used to read tool number +
+ 宏变量地址 + 读取的长度信息 + 是否成功 +
+ + + 写宏变量,需要指定地址及写入的数据
+ Write macro variable, need to specify the address and write data +
+ 地址 + 数据值 + 是否成功 +
+ + + 根据刀具号写入长度形状补偿,刀具号为1-24
+ Write length shape compensation according to the tool number, the tool number is 1-24 +
+ 刀具号,范围为1-24 + 补偿值 + 是否写入成功 +
+ + + 根据刀具号写入长度磨损补偿,刀具号为1-24
+ Write length wear compensation according to the tool number, the tool number is 1-24 +
+ 刀具号,范围为1-24 + 补偿值 + 是否写入成功 +
+ + + 根据刀具号写入半径形状补偿,刀具号为1-24
+ Write radius shape compensation according to the tool number, the tool number is 1-24 +
+ 刀具号,范围为1-24 + 补偿值 + 是否写入成功 +
+ + + 根据刀具号写入半径磨损补偿,刀具号为1-24
+ Write radius wear compensation according to the tool number, the tool number is 1-24 +
+ 刀具号,范围为1-24 + 补偿值 + 是否写入成功 +
+ + + 读取伺服负载
+ Read servo load +
+ 轴负载 +
+ + + 读取机床的坐标,包括机械坐标,绝对坐标,相对坐标
+ Read the coordinates of the machine tool, including mechanical coordinates, absolute coordinates, and relative coordinates +
+ 数控机床的坐标信息,包括机械坐标,绝对坐标,相对坐标 +
+ + + 读取报警信息
+ Read alarm information +
+ 机床的当前的所有的报警信息 +
+ + + 读取fanuc机床的时间,0是开机时间,1是运行时间,2是切割时间,3是循环时间,4是空闲时间,返回秒为单位的信息
+ Read the time of the fanuc machine tool, 0 is the boot time, 1 is the running time, 2 is the cutting time, + 3 is the cycle time, 4 is the idle time, and returns the information in seconds. +
+ 读取的时间类型 + 秒为单位的结果 +
+ + + 读取报警状态信息
+ Read alarm status information +
+ 报警状态数据 +
+ + + 读取系统的基本信息状态,工作模式,运行状态,是否急停等等操作
+ Read the basic information status of the system, working mode, running status, emergency stop, etc. +
+ 结果信息数据 +
+ + + 获取系统的轴名称信息,数组的长度表示有几个轴
+ Gets the axis name information of the system, and the length of the array indicates how many axes there are +
+ 机床的轴名称列表 +
+ + + 读取系统的主轴名称信息,返回的数组长度表示有几个主轴
+ Reads the system's spindle name information, and the returned array length indicates how many spindles there are +
+ 机床的主轴信息 +
+ + + 读取设备的程序列表
+ Read the program list of the device +
+ 读取结果信息 +
+ + + 读取当前的刀具补偿信息
+ Read current tool compensation information +
+ 刀具数量 + 结果内容 +
+ + + 读取当前的正在使用的刀具号
+ Read the tool number currently in use +
+ 刀具号信息 +
+ + + 读取寄存器的数据信息,需要传入寄存器的代码,起始地址,结束地址信息
+ To read the data information of the register, you need to pass in the code of the register, the start address, and the end address information +
+ 寄存器代码 + 起始的地址 + 结束的地址 + 包含原始字节信息的结果对象 +
+ + + 将原始字节的数据写入到指定的寄存器里,需要传入寄存器的代码,起始地址,原始的字节数据信息
+ To write the original byte data into the specified register, you need to pass in the code of the register, the starting address, and the original byte data information +
+ 寄存器代码 + 起始的地址 + 等待写入的原始字节数据 + 是否写入成功 +
+ + + 读取PMC数据,需要传入起始地址和结束地址,返回byte[]数据信息
+ To read PMC data, you need to pass in the start address and length, and return byte[] data information +
+ + 地址支持,G,F,Y,X,A,R,T,K,C,D,E 地址,例如 G5 + + 起始地址,地址支持,G,F,Y,X,A,R,T,K,C,D,E 地址,例如 G5 + 长度信息 + 读取结果 +
+ + + 写入PMC数据,需要传入起始地址和,以及等待写入的byte[]数据信息
+ To write PMC data, you need to pass in the start address, as well as the byte[] data information waiting to be written +
+ + 地址支持,G,F,Y,X,A,R,T,K,C,D,E 地址,例如 G5 + + 起始地址,地址支持,G,F,Y,X,A,R,T,K,C,D,E 地址,例如 G5 + 等待写入的原始字节数据 + 是否写入成功 +
+ + + 读取工件尺寸
+ Read workpiece size +
+ 结果数据信息 +
+ + + 读取当前的程序内容,只能读取程序的片段,返回程序内容。
+ Read the current program content, only read the program fragments, and return the program content. +
+ 程序内容 +
+ + + 设置指定的程序号为当前的主程序,如果程序号不存在,返回错误信息
+ Set the specified program number as the current main program, if the program number does not exist, an error message will be returned +
+ 程序号信息 + 是否设置成功 +
+ + + 启动加工程序
+ Start the processing program +
+ 是否启动成功 +
+ + + [商业授权] 将指定文件的NC加工程序,下载到数控机床里,返回是否下载成功
+ [Authorization] Download the NC machining program of the specified file to the CNC machine tool, and return whether the download is successful +
+ + 程序文件的内容必须%开始,%结束,下面是一个非常简单的例子:
+ %
+ O0006
+ G90G10L2P1
+ M30
+ % +
+ 程序文件的路径 + 是否下载成功 +
+ + + [商业授权] 将指定程序内容的NC加工程序,写入到数控机床里,返回是否下载成功
+ [Authorization] Download the NC machining program to the CNC machine tool, and return whether the download is successful +
+ + 程序文件的内容必须%开始,%结束,下面是一个非常简单的例子:
+ %
+ O0006
+ G90G10L2P1
+ M30
+ % +
+ 程序内容信息 + 每次写入的长度信息 + 程序路径信息,默认为空,就是 //CNC_MEM/USER/PATH1/ 如果需要指定PATH2,需要输入 //CNC_MEM/USER/PATH2/ + 是否下载成功 +
+ + + [商业授权] 读取指定程序号的程序内容,可以指定路径信息,路径默认为空就是主路径,//CNC_MEM/USER/PATH1/ ,也可以指定其他路径
+ [Authorization] Read the program content of the specified program number +
+ 程序号或是程序名称 + 程序路径信息,默认为空,就是 //CNC_MEM/USER/PATH1/ 如果需要指定PATH2,需要输入 //CNC_MEM/USER/PATH2/ + 程序内容 +
+ + + + + + 根据指定的程序号信息,删除当前的程序信息
+ According to the designated program number information, delete the current program information +
+ 程序号 + 是否删除成功 +
+ + + 根据指定的文件名来删除文件,如果是路径,则必须 '/' 结尾,如果是文件,则需要输入完整的文件名,例如://CNC_MEM/USER/PATH2/O12
+ Delete the file according to the specified file name, if it is a path, it must end with '/', if it is a file, you need to enter the complete file name, for example: //CNC_MEM/USER/PATH2/O12 +
+ 文件名称,也可以是路径信息,例如://CNC_MEM/USER/PATH2/O12 + 是否删除成功 +
+ + + 读取当前程序的前台路径
+ Read the foreground path of the current program +
+ 程序的路径信息 +
+ + + 读取指定路径下的所有的子路径和文件的信息,路径信息,例如 "//CNC_MEM/USER/" + + 路径信息,例如 "//CNC_MEM/USER/" + 文件及路径信息 + + + + 获取指定的路径里所有的文件夹数量和文件数量之和,路径示例:例如 "//CNC_MEM/USER/", "//CNC_MEM/USER/PATH1/" + + 路径信息,例如 "//CNC_MEM/USER/" + 文件夹数量和文件数量之和 + + + + 设置指定路径为当前路径
+ Set the specified path as the current path +
+ 程序名 + 结果信息 +
+ + + 读取机床的当前时间信息
+ Read the current time information of the machine tool +
+ 时间信息 +
+ + + 读取当前的已加工的零件数量
+ Read the current number of processed parts +
+ 已经加工的零件数量 +
+ + + 读取期望的加工的零件数量
+ Read the expected number of processed parts +
+ 期望的加工的零件数量 +
+ + + 读取机床的操作信息
+ Read machine operation information +
+ 操作信息列表 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 构建读取一个命令的数据内容 + + 命令码 + 第一个参数内容 + 第二个参数内容 + 第三个参数内容 + 第四个参数内容 + 第五个参数内容 + 总报文信息 + + + + 构建读取多个命令的数据内容 + + 模式 + 命令码 + 第一个参数内容 + 第二个参数内容 + 第三个参数内容 + 第四个参数内容 + 第五个参数内容 + 总报文信息 + + + + 创建写入byte[]数组的报文信息 + + 模式 + 命令码 + 第一个参数内容 + 第二个参数内容 + 第三个参数内容 + 第四个参数内容 + 等待写入的byte数组信息 + 总报文信息 + + + + 创建写入单个double数组的报文信息 + + 功能码 + 第一个参数内容 + 第二个参数内容 + 第三个参数内容 + 第四个参数内容 + 等待写入的double数组信息 + 总报文信息 + + + + 创建多个命令报文的总报文信息 + + 报文命令的数组 + 总报文信息 + + + + 创建读取运行程序的报文信息 + + 程序号 + 程序路径信息 + 总报文 + + + + 从机床返回的数据里解析出实际的数据内容,去除了一些多余的信息报文。 + + 返回的报文信息 + 解析之后的报文信息 + + + + + + + 当前机床的报警信息 + + + + + 当前报警的ID信息 + + + + + 当前的报警类型 + + + + + 报警的轴信息 + + + + + 报警的消息 + + + + + 系统的坐标信息 + + + + + 绝对坐标 + + + + + 机械坐标 + + + + + 相对坐标 + + + + + 系统状态信息 + + + + + dummy + + + + + T/M mode + + + + + selected automatic mode + + + + + running status + + + + + axis, dwell status + + + + + m, s, t, b status + + + + + emergency stop status,为1就是急停,为0就是正常 + + + + + alarm status + + + + + editting status + + + + + + + + 瓶子控件 + + + + + 实例化一个新的控件对象 + + + + + 获取或设置瓶子的液位值。 + + + + + 获取或设置瓶子是否处于打开的状态。 + + + + + 获取或设置瓶子的标签信息,用于绘制在瓶子上的信息。 + + + + + 获取或设置瓶子的备注信息,用于绘制在瓶子顶部的信息。 + + + + + 重写消息处理机制 + + 系统消息 + + + + 重新绘制界面图形 + + 绘制消息 + + + + 必需的设计器变量。 + + + + + 清理所有正在使用的资源。 + + 如果应释放托管资源,为 true;否则为 false。 + + + + 设计器支持所需的方法 - 不要修改 + 使用代码编辑器修改此方法的内容。 + + + + + 一个自定义的按钮控件 + + + + + 实例化一个按钮对象 + + + + + 设置或获取显示的文本 + + + + + 设置或获取显示文本的颜色 + + + + + 设置按钮的圆角 + + + + + 用来设置按钮的选中状态 + + + + + 已经弃用 + + + + + 已经弃用 + + + + + 按钮的背景色 + + + + + 按钮的背景色 + + + + + 鼠标挪动时的活动颜色 + + + + + 设置按钮的边框是否可见 + + + + + 存放用户需要保存的一些额外的信息 + + + + + 触发一次点击的事件 + + + + + 重绘数据区 + + + + + + 点击按钮的触发事件 + + + + + + 点击的时候触发事件 + + + + + + 必需的设计器变量。 + + + + + 清理所有正在使用的资源。 + + 如果应释放托管资源,为 true;否则为 false。 + + + + 设计器支持所需的方法 - 不要修改 + 使用代码编辑器修改此方法的内容。 + + + + + 一个时钟控件 + + + + + 实例化一个时钟控件 + + + + + 获取时钟的当前时间 + + + + + 获取或设置时钟指针的颜色 + + + + + 获取或设置时钟分钟指针颜色 + + + + + 获取或设置秒钟指针颜色 + + + + + 获取或设置时钟的个性化文本 + + + + + 字体 + + + + + 重绘控件显示 + + + + + + 必需的设计器变量。 + + + + + 清理所有正在使用的资源。 + + 如果应释放托管资源,为 true;否则为 false。 + + + + 设计器支持所需的方法 - 不要 + 使用代码编辑器修改此方法的内容。 + + + + + 曲线控件对象 + + + 详细参照如下的博客: + + + + + 实例化一个曲线显示的控件 + + + + + 获取或设置图形的纵坐标的最大值,该值必须大于最小值 + + + + + 获取或设置图形的纵坐标的最小值,该值必须小于最大值 + + + + + 获取或设置图形的纵坐标的最大值,该值必须大于最小值 + + + + + 获取或设置图形的纵坐标的最小值,该值必须小于最大值 + + + + + 获取或设置图形的纵轴分段数 + + + + + 获取或设置所有的数据是否强制在一个界面里显示 + + + + + 获取或设置拉伸模式下的最大数据量 + + + + + 获取或设置虚线是否进行显示 + + + + + 获取或设置坐标轴及相关信息文本的颜色 + + + + + 获取或设置虚线的颜色 + + + + + 获取或设置纵向虚线的分隔情况,单位为多少个数据 + + + + + 获取或设置实时数据新增时文本相对应于时间的格式化字符串,默认HH:mm + + + + + 获取或设置图标的标题信息 + + + + + 设置曲线的横坐标文本,适用于显示一些固定的曲线信息 + + 应该和曲线的点数一致 + + + + 新增或修改一条指定关键字的左参考系曲线数据,需要指定数据,颜色随机,没有数据上限,线条宽度为1 + + 曲线关键字 + 曲线的具体数据 + + + + 新增或修改一条指定关键字的左参考系曲线数据,需要指定数据,颜色,没有数据上限,线条宽度为1 + + 曲线关键字 + + + + + + 新增或修改一条指定关键字的右参考系曲线数据,需要指定数据,颜色随机,没有数据上限,线条宽度为1 + + 曲线关键字 + + + + + 新增或修改一条指定关键字的右参考系曲线数据,需要指定数据,颜色,没有数据上限,线条宽度为1 + + 曲线关键字 + + + + + + 新增或修改一条指定关键字的曲线数据,需要指定参考系及数据,颜色,线条宽度 + + 曲线关键字 + 是否以左侧坐标轴为参照系 + 数据 + 线条颜色 + 线条宽度 + + + + 移除指定关键字的曲线 + + 曲线关键字 + + + + 移除指定关键字的曲线 + + + + + 新增指定关键字曲线的一个数据,注意该关键字的曲线必须存在,否则无效 + + 新增曲线的关键字 + + 是否刷新界面 + + + + 新增指定关键字曲线的一个数据,注意该关键字的曲线必须存在,否则无效 + + 曲线的关键字 + 数据值 + + + + 新增指定关键字曲线的一组数据,注意该关键字的曲线必须存在,否则无效 + + 曲线的关键字 + 数组值 + + + + 新增指定关键字数组曲线的一组数据,注意该关键字的曲线必须存在,否则无效,一个数据对应一个数组 + + 曲线的关键字数组 + 数组值 + + + + 设置一条曲线是否是可见的,如果该曲线不存在,则无效。 + + 关键字 + 是否可见 + + + + 设置多条曲线是否是可见的,如果该曲线不存在,则无效。 + + 关键字 + 是否可见 + + + + 新增一条左侧的辅助线,使用默认的文本颜色 + + 数据值 + + + + 新增一条左侧的辅助线,使用指定的颜色 + + 数据值 + 线条颜色 + + + + 新增一条左侧的辅助线 + + 数据值 + 线条颜色 + 线条宽度 + + + + 新增一条右侧的辅助线,使用默认的文本颜色 + + 数据值 + + + + 新增一条右侧的辅助线,使用指定的颜色 + + 数据值 + 线条颜色 + + + + 新增一条右侧的辅助线 + + 数据值 + 线条颜色 + 线条宽度 + + + + 移除所有的指定值的辅助曲线,包括左边的和右边的 + + + + + + 移除所有的辅助线 + + + + + 必需的设计器变量。 + + + + + 清理所有正在使用的资源。 + + 如果应释放托管资源,为 true;否则为 false。 + + + + 设计器支持所需的方法 - 不要修改 + 使用代码编辑器修改此方法的内容。 + + + + + 曲线数据对象 + + + + + 实例化一个对象 + + + + + 数据 + + + + + 线条的宽度 + + + + + 曲线颜色 + + + + + 是否左侧参考系,True为左侧,False为右侧 + + + + + 本曲线是否显示出来,默认为显示 + + + + + 辅助线对象 + + + + + 实际的数据值 + + + + + 实际的数据绘制 + + + + + 辅助线的颜色 + + + + + 辅助线的画笔资源 + + + + + 辅助线的宽度 + + + + + 辅助线文本的画刷 + + + + + 是否左侧参考系,True为左侧,False为右侧 + + + + + 释放内存信息 + + + + + 一个罐子形状的控件 + + + + + 实例化一个罐子形状的控件 + + + + + 获取或设置容器罐的背景色。 + + + + + 获取或设置容器罐的边框色。 + + + + + 获取或设置显示的文本信息 + + + + + 获取或设置文本的颜色 + + + + + 获取或设置文本的背景色 + + + + + 必需的设计器变量。 + + + + + 清理所有正在使用的资源。 + + 如果应释放托管资源,为 true;否则为 false。 + + + + 设计器支持所需的方法 - 不要修改 + 使用代码编辑器修改此方法的内容。 + + + + + 仪表盘控件类 + + + + + 实例化一个仪表盘控件 + + + + + 获取中心点的坐标 + + + + + + 获取或设置仪表盘的背景色 + + + + + 获取或设置指针的颜色 + + + + + 获取或设置数值的起始值,默认为0 + + + + + 获取或设置数值的最大值,默认为100 + + + + + 获取或设置数值的当前值,应该处于最小值和最大值之间 + + + + + 获取或设置数值的上限报警值,设置为超过最大值则无上限报警 + + + + + 获取或设置数值的下限报警值,设置为超过最大值则无上限报警 + + + + + 获取或设置仪表盘的分割段数,最小为2,最大1000 + + + + + 获取或设置仪表盘的单位描述文本 + + + + + 获取或设置文本是否是指针的下面 + + + + + 通常情况,仪表盘不会大于半个圆,除非本属性设置为 True + + + + + 必需的设计器变量。 + + + + + 清理所有正在使用的资源。 + + 如果应释放托管资源,为 true;否则为 false。 + + + + 设计器支持所需的方法 - 不要修改 + 使用代码编辑器修改此方法的内容。 + + + + + 信号灯的控件类 + + + + + 实例化一个信号灯控件的对象 + + + + + 获取或设置开关按钮的背景色 + + + + + 必需的设计器变量。 + + + + + 清理所有正在使用的资源。 + + 如果应释放托管资源,为 true;否则为 false。 + + + + 设计器支持所需的方法 - 不要修改 + 使用代码编辑器修改此方法的内容。 + + + + + 一个饼图的控件 + + + + + 实例化一个饼图的控件 + + + + + 是否显示百分比信息 + + + + + 是否在图形上显示占比非常小的文本信息 + + + + + 随机生成颜色,该颜色相对于白色为深色颜色 + + + + + + 设置显示的数据源 + + 特殊的显示对象 + + + + + 根据名称和值进行数据源的显示,两者的长度需要一致 + + 名称 + 值 + + + + + 必需的设计器变量。 + + + + + 清理所有正在使用的资源。 + + 如果应释放托管资源,为 true;否则为 false。 + + + + 设计器支持所需的方法 - 不要修改 + 使用代码编辑器修改此方法的内容。 + + + + + + + + + + 管道控件信息 + + + + + 获取或设置管道线的宽度。 + + + + + 获取或设置管道线是否处于活动状态。 + + + + + 获取或设置管道活动状态的颜色。 + + + + + 获取或设置管道的背景色 + + + + + 获取或设置管道线的移动速度。该速度和管道的宽度有关 + + + + + 获取或设置管道线的坐标。 + + + + + 绘制 + + + + + + 必需的设计器变量。 + + + + + 清理所有正在使用的资源。 + + 如果应释放托管资源,为 true;否则为 false。 + + + + 设计器支持所需的方法 - 不要修改 + 使用代码编辑器修改此方法的内容。 + + + + + 一个开关按钮类 + + + + + 实例化一个开关按钮对象 + + + + + 开关按钮发生变化的事件 + + + + + 获取或设置开关按钮的背景色 + + + + + 获取或设置开关按钮的前景色 + + + + + 获取或设置开关按钮的开合状态 + + + + + 获取或设置两种开关状态的文本描述,例如:new string[]{"Off","On"} + + + + + 必需的设计器变量。 + + + + + 清理所有正在使用的资源。 + + 如果应释放托管资源,为 true;否则为 false。 + + + + 设计器支持所需的方法 - 不要修改 + 使用代码编辑器修改此方法的内容。 + + + + + 一个直立的进度条控件,满足不同的情况使用 + + + + + 实例化一个对象 + + + + + 获取或设置光标在控件上显示的信息 + + + + + 获取或设置控件的背景颜色值 + + + + + 获取或设置进度的颜色 + + + + + 进度条的最大值,默认为100 + + + + + 当前进度条的值,不能大于最大值或小于0 + + + + + 是否显示进度 + + + + + 设置进度条的边框颜色 + + + + + 设置进度变更的速度 + + + + + 获取或设置进度条变化的时候是否采用动画效果 + + + + + 进度条的样式 + + + + + 必需的设计器变量。 + + + + + 清理所有正在使用的资源。 + + 如果应释放托管资源,为 true;否则为 false。 + + + + 设计器支持所需的方法 - 不要修改 + 使用代码编辑器修改此方法的内容。 + + + + + 进度条的样式 + + + + + 竖直的,纵向的进度条 + + + + + 水平进度条 + + + + + 罗克韦尔PLC的地址信息 + + + + + 获取或设置等待读取的数据的代码
+ Get or set the code of the data waiting to be read +
+
+ + + 获取或设置PLC的DB块数据信息
+ Get or set PLC DB data information +
+
+ + + 从指定的地址信息解析成真正的设备地址信息 + + 地址信息 + 数据长度 + + + + + + + 从实际的罗克韦尔的地址里面解析出地址对象,例如 A9:0
+ Parse the address object from the actual Rockwell address, such as A9:0 +
+ 实际的地址数据信息,例如 A9:0 + 是否成功的结果对象 +
+ + + 从实际的罗克韦尔的地址里面解析出地址对象,例如 A9:0
+ Parse the address object from the actual Rockwell address, such as A9:0 +
+ 实际的地址数据信息,例如 A9:0 + 读取的数据长度 + 是否成功的结果对象 +
+ + + Cnet协议的地址数据信息,未完成 + + + + + 数据的代号,通常是 'P', 'M', 'L', 'K', 'F', 'T', 'C', 'D', 'S', 'Q', 'I', 'N', 'U', 'Z', 'R' + + + + + 数据的类型,通常是 X,B,W,D,L + + + + + 从实际的PLC的地址里面解析出地址对象
+ Resolve the address object from the actual PLC address +
+ 西门子的地址数据信息 + 是否成功的结果对象 +
+ + + 从实际的PLC的地址里面解析出地址对象
+ Resolve the address object from the actual PLC address +
+ PLC的地址数据信息 + 读取的数据长度 + 是否成功的结果对象 +
+ + + 所有设备通信类的地址基础类
+ Address basic class of all device communication classes +
+
+ + + 获取或设置起始地址
+ Get or set the starting address +
+
+ + + 解析字符串的地址
+ Parse the address of the string +
+ 地址信息 +
+ + + + + + 设备地址数据的信息,通常包含起始地址,数据类型,长度
+ Device address data information, usually including the starting address, data type, length +
+
+ + + 数字的起始地址,也就是偏移地址
+ The starting address of the number, which is the offset address +
+
+ + + 读取的数据长度,单位是字节还是字取决于设备方
+ The length of the data read, the unit is byte or word depends on the device side +
+
+ + + 从指定的地址信息解析成真正的设备地址信息
+ Parsing from the specified address information into real device address information +
+ 地址信息 + 数据长度 +
+ + + + + + Fanuc的PMC地址对象信息 + + + + + 地址代号信息 + + + + + 结束的地址值 + + + + + 根据实际的地址信息,解析出PMC地址信息 + + 地址信息,例如 R0, G5 + 读取的长度信息 + PMC地址对象 + + + + 永宏编程口的地址类对象 + + + + + 数据的类型 + + + + + + + + + + + 从普通的PLC的地址转换为HSL标准的地址信息 + + 地址信息 + 数据长度 + 是否成功的地址结果 + + + + 富士CommandSettingsType的协议信息 + + + + + 数据的代号信息 + + + + + 地址的头信息,缓存的情况 + + + + + + + + + + + 从字符串地址解析fuji的实际地址信息,如果解析成功,则 为 True,取 值即可。 + + 字符串地址 + 读取的长度信息 + 是否解析成功 + + + + FujiSPB的地址信息,可以携带数据类型,起始地址操作 + + + + + 数据的类型代码 + + + + + 当是位地址的时候,用于标记的信息 + + + + + 获取读写字数据的时候的地址信息内容 + + 报文信息 + + + + 获取命令,写入字地址的某一位的命令内容 + + 报文信息 + + + + 按照位为单位获取相关的索引信息 + + 位数据信息 + + + + 从实际的Fuji的地址里面解析出地址对象
+ Resolve the address object from the actual Fuji address +
+ 富士的地址数据信息 + 是否成功的结果对象 +
+ + + 从实际的Fuji的地址里面解析出地址对象
+ Resolve the address object from the actual Fuji address +
+ 富士的地址数据信息 + 读取的数据长度 + 是否成功的结果对象 +
+ + + 富士SPH地址类对象 + + + + + 数据的类型代码 + + + + + 当前地址的位索引信息 + + + + + 从实际的Fuji的地址里面解析出地址对象
+ Resolve the address object from the actual Fuji address +
+ 富士的地址数据信息 + 是否成功的结果对象 +
+ + + 从实际的Fuji的地址里面解析出地址对象
+ Resolve the address object from the actual Fuji address +
+ 富士的地址数据信息 + 读取的数据长度 + 是否成功的结果对象 +
+ + + GE的SRTP协议的地址内容,主要包含一个数据代码信息,还有静态的解析地址的方法
+ The address content of GE's SRTP protocol mainly includes a data code information, as well as a static method of address resolution +
+
+ + + 获取或设置等待读取的数据的代码
+ Get or set the code of the data waiting to be read +
+
+ + + + + + + + + 从GE的地址里,解析出实际的带数据码的 地址信息,起始地址会自动减一,和实际的地址相匹配 + + 实际的地址数据 + 读取的长度信息 + 是否位操作 + 是否成功的GE地址对象 + + + + 基恩士上位链路协议的地址类对象 + + + + + 实例化一个默认的对象 + + + + + 通过指定的参数来实例化对象 + + 数据类型 + 偏移地址 + 切割但愿长度 + + + + 获取或设置等待读取的数据的代码
+ Get or set the code of the data waiting to be read +
+
+ + + 获取或设置读取的时候切割的数据长度信息 + + + + + 获取地址的字符串表示方式 + + 字符串信息 + + + + 从指定的地址信息解析成真正的设备地址信息 + + 地址信息 + 数据长度 + + + + 位地址转换方法,101等同于10.1等同于10*16+1=161
+ Bit address conversion method, 101 is equivalent to 10.1 is equivalent to 10 * 16 + 1 = 161 +
+ 地址信息 + 实际的位地址信息 +
+ + + 解析出一个基恩士上位链路协议的地址信息 + + 字符串地址 + 长度信息 + 成功地址 + + + + 三菱的数据地址表示形式
+ Mitsubishi's data address representation +
+
+ + + 实例化一个默认的对象 + + + + + 三菱的数据类型及地址信息 + + + + + 从指定的地址信息解析成真正的设备地址信息,默认是三菱的地址 + + 地址信息 + 数据长度 + + + + + + + 从实际三菱的地址里面解析出我们需要的地址类型
+ Resolve the type of address we need from the actual Mitsubishi address +
+ 三菱的地址数据信息 + 读取的数据长度 + 是否读写bool的操作 + 是否成功的结果对象 +
+ + + + + + 从实际基恩士的地址里面解析出我们需要的地址信息
+ Resolve the address information we need from the actual Keyence address +
+ 基恩士的地址数据信息 + 读取的数据长度 + 是否读写bool操作 + 是否成功的结果对象 +
+ + + 从实际松下的地址里面解析出MC协议标准的地址对象 + + 松下的地址数据信息 + 读取的数据长度 + 是否进行bool类型的读写操作 + 是否成功的结果对象 + + + + 三菱的FxLinks协议信息 + + + + + 实例化一个默认的对象 + + + + + 当前的地址类型信息 + + + + + + + + + + + + + + 从三菱FxLinks协议里面解析出实际的地址信息 + + 三菱的地址信息 + 读取的长度信息 + 解析结果信息 + + + + 扩展memobus协议的地址信息 + + + + + 获取或设置当前地址对应的功能码信息 + + + + + 获取或设置当前的地址对应的主功能码信息 + + + + + + + + 获取并解析出memobus地址的信息及功能码 + + 地址信息 + 是否位 + memobus的地址信息 + + + + 欧姆龙的Fins协议的地址类对象 + + + + + 进行位操作的指令 + + + + + 进行字操作的指令 + + + + + 从指定的地址信息解析成真正的设备地址信息 + + 地址信息 + 数据长度 + + + + 从实际的欧姆龙的地址里面解析出地址对象
+ Resolve the address object from the actual Omron address +
+ 欧姆龙的地址数据信息 + 是否成功的结果对象 +
+ + + 从实际的欧姆龙的地址里面解析出地址对象
+ Resolve the address object from the actual Omron address +
+ 欧姆龙的地址数据信息 + 读取的数据长度 + 是否成功的结果对象 +
+ + + 西门子的地址数据信息,主要包含数据代码,DB块,偏移地址(偏移地址对于不是CT类型而已,是位为单位的),当处于写入时,Length无效
+ Address data information of Siemens, mainly including data code, DB block, offset address, when writing, Length is invalid +
+
+ + + 获取或设置等待读取的数据的代码
+ Get or set the code of the data waiting to be read +
+
+ + + 获取或设置PLC的DB块数据信息
+ Get or set PLC DB data information +
+
+ + + 从指定的地址信息解析成真正的设备地址信息 + + 地址信息 + 数据长度 + + + + + + + 计算特殊的地址信息
+ Calculate Special Address information +
+ 字符串地址 -> String address + 是否是定时器和计数器的地址 + 实际值 -> Actual value +
+ + + 从实际的西门子的地址里面解析出地址对象
+ Resolve the address object from the actual Siemens address +
+ 西门子的地址数据信息 + 是否成功的结果对象 +
+ + + 从实际的西门子的地址里面解析出地址对象
+ Resolve the address object from the actual Siemens address +
+ 西门子的地址数据信息 + 读取的数据长度 + 是否成功的结果对象 +
+ + + 丰田工机PLC的地址类对象 + + + + + 获取或设置等待读取的地址的PRG编号,如果小于0,则表示不使用。
+ Gets or sets the PRG number of the address waiting to be read, if less than 0, it means that it is not used. +
+
+ + + + + + 从实际的丰田PLC的地址里面解析出地址对象
+ Resolve the address object from the actual Vigor address +
+ 丰田的地址数据信息 + 读取的数据长度 + 是否是对位进行访问的 + 是否成功的结果对象 +
+ + + 丰炜PLC的地址类对象 + + + + + 获取或设置等待读取的数据的代码
+ Get or set the code of the data waiting to be read +
+
+ + + + + + 从实际的丰炜PLC的地址里面解析出地址对象
+ Resolve the address object from the actual Vigor address +
+ 丰炜的地址数据信息 + 读取的数据长度 + 是否是对位进行访问的 + 是否成功的结果对象 +
+ + + 信捷内部协议的地址类对象
+ The address class object of Xinjie internal protocol +
+
+ + + 实例化一个默认的对象
+ instantiate a default object +
+
+ + + 指定类型,地址偏移,临界地址来实例化一个对象
+ Specify the type, address offset, and critical address to instantiate an object +
+ 数据的类型代号 + 偏移地址信息 + 临界地址信息 + 站号信息 +
+ + + 获取或设置等待读取的数据的代码
+ Get or set the code of the data waiting to be read +
+
+ + + 获取或设置当前的站号信息
+ Get or set the current station number information +
+
+ + + 获取或设置协议升级时候的临界地址信息
+ Get or set the critical address information when the protocol is upgraded +
+
+ + + + + + 从实际的信捷PLC的地址里面解析出地址对象
+ Resolve the address object from the actual XinJE address +
+ 信捷的地址数据信息 + 读取的长度信息 + 默认的站号信息 + 是否成功的结果对象 +
+ + + + + + 横河PLC的地址表示类
+ Yokogawa PLC address display class +
+
+ + + 获取或设置等待读取的数据的代码
+ Get or set the code of the data waiting to be read +
+
+ + + 获取当前横河PLC的地址的二进制表述方式
+ Obtain the binary representation of the current Yokogawa PLC address +
+ 二进制数据信息 +
+ + + + + + + + + 从普通的PLC的地址转换为HSL标准的地址信息 + + 地址信息 + 数据长度 + 是否成功的地址结果 + + + + Modbus协议地址格式,可以携带站号,功能码,地址信息
+ Modbus protocol address format, can carry station number, function code, address information +
+
+ + + 实例化一个默认的对象
+ Instantiate a default object +
+
+ + + 实例化一个对象,使用指定的地址初始化
+ Instantiate an object, initialize with the specified address +
+ 传入的地址信息,支持富地址,例如s=2;x=3;100 +
+ + + 实例化一个对象,使用指定的地址及功能码初始化
+ Instantiate an object and initialize it with the specified address and function code +
+ 传入的地址信息,支持富地址,例如s=2;x=3;100 + 默认的功能码信息 +
+ + + 实例化一个对象,使用指定的地址,站号,功能码来初始化
+ Instantiate an object, use the specified address, station number, function code to initialize +
+ 传入的地址信息,支持富地址,例如s=2;x=3;100 + 站号信息 + 默认的功能码信息 +
+ + + 获取或设置当前地址的站号信息
+ Get or set the station number information of the current address +
+
+ + + 获取或设置当前地址携带的功能码
+ Get or set the function code carried by the current address +
+
+ + + 获取或设置当前地址在写入的情况下使用的功能码,用来扩展一些非常特殊的自定义服务器
+
+
+ + + + + + 地址偏移指定的位置,返回一个新的地址对象
+ The address is offset by the specified position and a new address object is returned +
+ 数据值信息 + 新增后的地址信息 +
+ + + 地址偏移1,返回一个新的地址对象
+ The address is offset by 1 and a new address object is returned +
+ 新增后的地址信息 +
+ + + + + + 文件服务器的目录管理类的基本信息 + + + + + 实例化一个默认的对象 + + + + + 文件目录的名称信息 + + + + + 获取或设置文件的总大小 + + + + + 获取或设置文件的总数量 + + + + + 获取或设置最后一次文件更新的时间,如果不存在文件,则为理论最小值 + + + + + 获取或设置最后一次更新的文件的基本信息,如果该目录不存在文件,则本值为空 + + + + + + + + 当前MQTT服务器文件操作的对象类
+ Object class of current MQTT server file operation +
+
+ + + 指示上传还是下载的操作,Upload上传,Download下载,Delete删除文件,DeleteFolder删除目录
+ Indicate upload or download operation, "Upload": upload, "Download": download, "Delete": delete file, "DeleteFolder": delete directory +
+
+ + + 文件上传或是下载的类别 + + + + + 上传,下载或是删除的文件名
+ File name uploaded, downloaded or deleted +
+
+ + + 当前操作消耗的时间
+ Time consumed by current operation +
+
+ + + 监控上传和下载文件的信息 + + + + + 实例化一个默认的对象 + + + + + 增加一个文件监控的对象信息 + + 文件监控对象 + + + + 根据唯一的ID信息,移除相关的文件监控对象 + + + + + + 获取当前所有的监控文件数据的快照 + + 文件监控列表 + + + + 单个的监控文件对象,用来监控客户端的信息以及上传下载的速度 + + + + + 实例化一个默认的对象 + + + + + 当前对象的唯一ID信息 + + + + + 当前对象的远程的IP及端口 + + + + + 当前对象的客户端ID + + + + + 当前对象的客户端用户名 + + + + + 当前的操作,Upload是上传,Download是下载 + + + + + 当前的操作的目录信息 + + + + + 当前操作的文件名 + + + + + 上传或下载的速度 + + + + + 当前操作的起始时间 + + + + + 最后一次更新数据的时间 + + + + + 文件的总大小 + + + + + 上一次的更新数据时的进度信息 + + + + + 更新当前的文件的状态 + + 当前的进度信息 + 当前的总大小 + + + + 倍福的ADS协议的信息 + + + + + + + + + + + 异形消息对象,用于异形客户端的注册包接收以及验证使用 + + + + + + + + + + + + + + 用于和 AllenBradley PLC 交互的消息协议类 + + + + + + + + + + + 用于和 AllenBradley PLC 交互的消息协议类 + + + + + + + + + + + CJT188的协议信息 + + + + + + + + + + + + + + 南京自动化研究所推出的DCS设备的消息类 + + + + + + + + + + + + + + DLT 645协议的串口透传的消息类 + + + + + + + + + + + + + + DLT698的协议消息文本 + + + + + + + + + + + + + + 埃夫特机器人的消息对象 + + + + + + + + + + + 旧版的机器人的消息类对象,保留此类为了实现兼容 + + + + + + + + + + + 发那科机器人的网络消息类 + + + + + + + + + + + 西门子Fetch/Write消息解析协议 + + + + + + + + + + + + + + + + + 用于欧姆龙通信的Fins协议的消息解析规则 + + + + + + + + + + + + + + + + + Fuji的CommandSettingType的消息类 + + + + + + + + + + + 富士SPB的消息内容 + + + + + + + + + + + 富士SPH协议的报文消息 + + + + + + + + + + + 通用电气公司的SRIP协议的消息 + + + + + + + + + + + 本组件系统使用的默认的消息规则,说明解析和反解析规则的 + + + + + + + + + + + + + + + + + IEC104消息结构信息 + + + + + + + + + + + 本系统的消息类,包含了各种解析规则,数据信息提取规则
+ The message class of this system contains various parsing rules and data information extraction rules +
+
+ + + 消息头的指令长度,第一次接受数据的长度
+ Instruction length of the message header, the length of the first received data +
+ + 当最高位字节的最高位为1时,第0和1位为校验的字符数量,第二高位字节表示结束字符之后的剩余字符长度信息,因为一个int占用四个字节,所以最多可以判断2个结束的字符信息。
+ When the highest bit of the highest-order byte is 1, the 0th and 1st bits are the number of characters to be checked, + and the second high-order byte indicates the length information of the remaining characters after the end character. + Because one int occupies four bytes, the maximum It is possible to judge the character information of 2 ends. +
+
+ + + 从当前的头子节文件中提取出接下来需要接收的数据长度
+ Extract the length of the data to be received from the current header file +
+ + 如果剩余字节的长度小于0,则表示消息头数据还没有接收完整,还需要接收一定的长度(返回值的绝对值),然后再判断剩余字节长度是否小于0,直到结果大于等于0为止,最多判断的次数为16次,超过16次将返回失败
+ If the length of the remaining bytes is less than 0, it means that the message header data has not been received completely, and a certain length (absolute value of the return value) needs to be received, + and then it is judged whether the length of the remaining bytes is less than 0 until the result is greater than or equal to 0, + the maximum number of judgments is 16, more than 16 times will return failure +
+ 返回接下来的数据内容长度 +
+ + + 在接收头报文的时候,返回前置无效的报文头字节长度,默认为0,不处理
+ When receiving a header message, return the header byte length of the invalid header, the default is 0, and no processing is performed. +
+ 接收到的头子节信息 + 头子节中无效的字节长度信息 +
+ + + 检查头子节的合法性
+ Check the legitimacy of the head subsection +
+ 特殊的令牌,有些特殊消息的验证 + 是否成功的结果 +
+ + + 获取头子节里的消息标识
+ Get the message ID in the header subsection +
+ 消息标识 +
+ + + 消息头字节
+ Message header byte +
+
+ + + 消息内容字节
+ Message content byte +
+
+ + + 发送的字节信息
+ Byte information sent +
+
+ + + Kuka机器人的 KRC4 控制器中的服务器KUKAVARPROXY + + + + + + + + + + + + + + LSIS的PLC的FastEnet的消息定义 + + + + + + + + + + + + + + + + + 三菱的A兼容1E帧ASCII协议解析规则 + + + + + + + + + + + + + + 三菱的A兼容1E帧协议解析规则 + + + + + + + + + + + + + + 基于MC协议的Qna兼容3E帧协议的ASCII通讯消息机制 + + + + + + + + + + + + + + 三菱的Qna兼容3E帧协议解析规则 + + + + + + + + + + + + + + Memobus协议的消息定义 + + + + + + + + + + + Modbus-Tcp协议支持的消息解析类 + + + + + + + + + + + + + + + + + 获取或设置是否进行检查返回的消息ID和发送的消息ID是否一致,默认为true,也就是检查
+ Get or set whether to check whether the returned message ID is consistent with the sent message ID, the default is true, that is, check +
+
+ + + 消息类的基类 + + + + + + + + + + + + + + + + + + + + + + + OpenProtocol协议的消息 + + + + + + + + + + + 西门子S7协议的消息解析规则 + + + + + + + + + + + + + + SAM身份证通信协议的消息 + + + + + + + + + + + + + + 西门子PPI的消息信息 + + + + + + + + + + + 专门用于接收指定字符结尾的网络消息 + + + + + 使用固定的一个字符结尾作为当前的报文接收条件,来实例化一个对象
+ Instantiate an object using a fixed end of one character as the current message reception condition +
+ 结尾的字符 +
+ + + 使用固定的两个个字符结尾作为当前的报文接收条件,来实例化一个对象
+ Instantiate an object using a fixed two-character end as the current message reception condition +
+ 第一个结尾的字符 + 第二个结尾的字符 +
+ + + 获取或设置在结束字符之后剩余的固定字节长度,有些则还包含两个字节的校验码,这时该值就需要设置为2。
+ Gets or sets the remaining fixed byte length after the end character, and some also contain a two-byte check code. In this case, the value needs to be set to 2. +
+
+ + + + + + + + + + + + 丰田工机的PLC的协议消息 + + + + + + + + + + + 图尔克Reader协议的消息 + + + + + + + + + + + + + + 横河PLC的以太网的二进制协议 + + + + + + + + + + + 用于读写的设备接口,相较于,增加了相关的方法,可以用来和设备进行额外的交互。
+ The device interface used for reading and writing. Compared with , + a method related to is added, which can be used for additional interaction with the device . +
+
+ + + 将当前的数据报文发送到设备去,具体使用什么通信方式取决于设备信息,然后从设备接收数据回来,并返回给调用者。
+ Send the current data message to the device, the specific communication method used depends on the device information, and then receive the data back from the device and return it to the caller. +
+ 发送的完整的报文信息 + 接收的完整的报文信息 + + 本方法用于实现本组件还未实现的一些报文功能,例如有些modbus服务器会有一些特殊的功能码支持,需要收发特殊的报文,详细请看示例 + +
+ + + 将多个数据报文按顺序发到设备,并从设备接收返回的数据内容,然后拼接成一个Byte[]信息,需要重写方法才能返回正确的结果。
+ Send multiple data packets to the device in sequence, and receive the returned data content from the device, and then splicing them into a Byte[] message, + you need to rewrite method to return the correct result. +
+ 发送的报文列表信息 + 是否接收成功 +
+ + + + + + + + + 所有的和设备或是交互类统一读写标准,公开了如何读写对方的一些api接口,并支持基于特性的读写操作
+ All unified read and write standards for devices and interaction classes, + expose how to read and write some API interfaces of each other, and support feature-based read and write operations +
+ + Modbus类,PLC类均实现了本接口,可以基于本接口实现统一所有的不同种类的设备的数据交互 + + + 此处举例实现modbus,三菱,西门子三种设备的统一的数据交互 + + +
+ + + 组件的日志工具,支持日志记录,只要实例化后,当前网络的基本信息,就以等级进行输出
+ The component's logging tool supports logging. As long as the instantiation of the basic network information, the output will be output at +
+ + 只要实例化即可以记录日志,实例化的对象需要实现接口 ,本组件提供了三个日志记录类,你可以实现基于 的对象。 + + 如下的实例化适用于所有的Network及其派生类,以下举两个例子,三菱的设备类及服务器类 + + + +
+ + + 当前连接的唯一ID号,默认为长度20的guid码加随机数组成,方便列表管理,也可以自己指定
+ The unique ID number of the current connection. The default is a 20-digit guid code plus a random number. +
+ + 当前的唯一连接ID信息在DTU的模式下,将发挥关键作用,标记唯一的DTU ID + +
+ + + 批量读取字节数组信息,需要指定地址和长度,返回原始的字节数组
+ Batch read byte array information, need to specify the address and length, return the original byte array +
+ 数据地址 + 数据长度 + 带有成功标识的byte[]数组 +
+ + + 写入原始的byte数组数据到指定的地址,返回是否写入成功
+ Write the original byte array data to the specified address, and return whether the write was successful +
+ 起始地址 + 写入值 + 是否写入成功 +
+ + + 批量读取数组信息,需要指定地址和长度,返回 数组
+ Batch read array information, need to specify the address and length, return array +
+ 数据地址 + 数据长度 + 带有成功标识的 bool[] 数组 +
+ + + 读取单个的数据信息
+ Read a single data message +
+ 数据地址 + 带有成功标识的 bool 值 +
+ + + 批量写入数组数据,返回是否成功
+ Batch write array data, return whether the write was successful +
+ 起始地址 + 写入值 + 是否写入成功 +
+ + + 写入单个的数据,返回是否成功
+ Write a single data, and return whether the write was successful +
+ 起始地址 + 写入值 + 是否写入成功 +
+ + + 读取16位的有符号的整型数据
+ Read 16-bit signed integer data +
+ 起始地址 + 带有成功标识的short数据 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 读取16位的有符号整型数组
+ Read 16-bit signed integer array +
+ 起始地址 + 读取的数组长度 + 带有成功标识的short数组 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 读取16位的无符号整型
+ Read 16-bit unsigned integer +
+ 起始地址 + 带有成功标识的ushort数据 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 读取16位的无符号整型数组
+ Read 16-bit unsigned integer array +
+ 起始地址 + 读取的数组长度 + 带有成功标识的ushort数组 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 读取32位的有符号整型
+ Read 32-bit signed integer +
+ 起始地址 + 带有成功标识的int数据 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 读取32位有符号整型数组
+ Read 32-bit signed integer array +
+ 起始地址 + 数组长度 + 带有成功标识的int数组 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 读取32位的无符号整型
+ Read 32-bit unsigned integer +
+ 起始地址 + 带有成功标识的uint数据 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 读取32位的无符号整型数组
+ Read 32-bit unsigned integer array +
+ 起始地址 + 数组长度 + 带有成功标识的uint数组 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 读取64位的有符号整型
+ Read 64-bit signed integer +
+ 起始地址 + 带有成功标识的long数据 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 读取64位的有符号整型数组
+ Read 64-bit signed integer array +
+ 起始地址 + 数组长度 + 带有成功标识的long数组 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 读取64位的无符号整型
+ Read 64-bit unsigned integer +
+ 起始地址 + 带有成功标识的ulong数据 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 读取64位的无符号整型的数组
+ Read 64-bit unsigned integer array +
+ 起始地址 + 数组长度 + 带成功标志的结果数据对象 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 读取单浮点数据
+ Read single floating point data +
+ 起始地址 + 带有成功标识的float数据 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 读取单浮点精度的数组
+ Read single floating point array +
+ 起始地址 + 数组长度 + 带有成功标识的float数组 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 读取双浮点的数据
+ Read double floating point data +
+ 起始地址 + 带有成功标识的double数据 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 读取双浮点数据的数组
+ Read double floating point data array +
+ 起始地址 + 数组长度 + 带有成功标识的double数组 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 读取字符串数据,默认为最常见的ASCII编码
+ Read string data, default is the most common ASCII encoding +
+ 起始地址 + 数据长度 + 带有成功标识的string数据 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 使用指定的编码,读取字符串数据
+ Reads string data using the specified encoding +
+ 起始地址 + 数据长度 + 指定的自定义的编码 + 带有成功标识的string数据 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 等待指定地址的值为指定的值,可以指定刷新数据的频率,等待的超时时间,如果超时时间为-1的话,则是无期限等待。
+ Waiting for the value of the specified address to be the specified value, you can specify the frequency of refreshing the data, + and the timeout time to wait. If the timeout time is -1, it is an indefinite wait. +
+ 其实地址 + 等待检测是值 + 读取的频率 + 等待的超时时间,如果超时时间为-1的话,则是无期限等待。 + 是否等待成功的结果对象,一旦通信失败,或是等待超时就返回失败。否则返回成功,并告知调用方等待了多久。 +
+ + + 等待指定地址的值为指定的值,可以指定刷新数据的频率,等待的超时时间,如果超时时间为-1的话,则是无期限等待。
+ Waiting for the value of the specified address to be the specified value, you can specify the frequency of refreshing the data, + and the timeout time to wait. If the timeout time is -1, it is an indefinite wait. +
+ 其实地址 + 等待检测是值 + 读取的频率 + 等待的超时时间,如果超时时间为-1的话,则是无期限等待。 + 是否等待成功的结果对象,一旦通信失败,或是等待超时就返回失败。否则返回成功,并告知调用方等待了多久。 +
+ + + 等待指定地址的值为指定的值,可以指定刷新数据的频率,等待的超时时间,如果超时时间为-1的话,则是无期限等待。
+ Waiting for the value of the specified address to be the specified value, you can specify the frequency of refreshing the data, + and the timeout time to wait. If the timeout time is -1, it is an indefinite wait. +
+ 其实地址 + 等待检测是值 + 读取的频率 + 等待的超时时间,如果超时时间为-1的话,则是无期限等待。 + 是否等待成功的结果对象,一旦通信失败,或是等待超时就返回失败。否则返回成功,并告知调用方等待了多久。 +
+ + + 等待指定地址的值为指定的值,可以指定刷新数据的频率,等待的超时时间,如果超时时间为-1的话,则是无期限等待。
+ Waiting for the value of the specified address to be the specified value, you can specify the frequency of refreshing the data, + and the timeout time to wait. If the timeout time is -1, it is an indefinite wait. +
+ 其实地址 + 等待检测是值 + 读取的频率 + 等待的超时时间,如果超时时间为-1的话,则是无期限等待。 + 是否等待成功的结果对象,一旦通信失败,或是等待超时就返回失败。否则返回成功,并告知调用方等待了多久。 +
+ + + 等待指定地址的值为指定的值,可以指定刷新数据的频率,等待的超时时间,如果超时时间为-1的话,则是无期限等待。
+ Waiting for the value of the specified address to be the specified value, you can specify the frequency of refreshing the data, + and the timeout time to wait. If the timeout time is -1, it is an indefinite wait. +
+ 其实地址 + 等待检测是值 + 读取的频率 + 等待的超时时间,如果超时时间为-1的话,则是无期限等待。 + 是否等待成功的结果对象,一旦通信失败,或是等待超时就返回失败。否则返回成功,并告知调用方等待了多久。 +
+ + + 等待指定地址的值为指定的值,可以指定刷新数据的频率,等待的超时时间,如果超时时间为-1的话,则是无期限等待。
+ Waiting for the value of the specified address to be the specified value, you can specify the frequency of refreshing the data, + and the timeout time to wait. If the timeout time is -1, it is an indefinite wait. +
+ 其实地址 + 等待检测是值 + 读取的频率 + 等待的超时时间,如果超时时间为-1的话,则是无期限等待。 + 是否等待成功的结果对象,一旦通信失败,或是等待超时就返回失败。否则返回成功,并告知调用方等待了多久。 +
+ + + 等待指定地址的值为指定的值,可以指定刷新数据的频率,等待的超时时间,如果超时时间为-1的话,则是无期限等待。
+ Waiting for the value of the specified address to be the specified value, you can specify the frequency of refreshing the data, + and the timeout time to wait. If the timeout time is -1, it is an indefinite wait. +
+ 其实地址 + 等待检测是值 + 读取的频率 + 等待的超时时间,如果超时时间为-1的话,则是无期限等待。 + 是否等待成功的结果对象,一旦通信失败,或是等待超时就返回失败。否则返回成功,并告知调用方等待了多久。 +
+ + + + + + + + + + + + + + + + + + + + + + + + 写入short数据,返回是否成功
+ Write short data, returns whether success +
+ 起始地址 + 写入值 + 带有成功标识的结果类对象 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 写入short数组,返回是否成功
+ Write short array, return whether the write was successful +
+ 起始地址 + 写入值 + 带有成功标识的结果类对象 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 写入ushort数据,返回是否成功
+ Write ushort data, return whether the write was successful +
+ 起始地址 + 写入值 + 带有成功标识的结果类对象 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 写入ushort数组,返回是否成功
+ Write ushort array, return whether the write was successful +
+ 起始地址 + 写入值 + 带有成功标识的结果类对象 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 写入int数据,返回是否成功
+ Write int data, return whether the write was successful +
+ 起始地址 + 写入值 + 带有成功标识的结果类对象 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 写入int[]数组,返回是否成功
+ Write int array, return whether the write was successful +
+ 起始地址 + 写入值 + 带有成功标识的结果类对象 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 写入uint数据,返回是否成功
+ Write uint data, return whether the write was successful +
+ 起始地址 + 写入值 + 带有成功标识的结果类对象 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 写入uint[]数组,返回是否成功
+ Write uint array, return whether the write was successful +
+ 起始地址 + 写入值 + 带有成功标识的结果类对象 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 写入long数据,返回是否成功
+ Write long data, return whether the write was successful +
+ 起始地址 + 写入值 + 带有成功标识的结果类对象 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 写入long数组,返回是否成功
+ Write long array, return whether the write was successful +
+ 起始地址 + 写入值 + 带有成功标识的结果类对象 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 写入ulong数据,返回是否成功
+ Write ulong data, return whether the write was successful +
+ 起始地址 + 写入值 + 带有成功标识的结果类对象 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 写入ulong数组,返回是否成功
+ Write ulong array, return whether the write was successful +
+ 起始地址 + 写入值 + 带有成功标识的结果类对象 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 写入float数据,返回是否成功
+ Write float data, return whether the write was successful +
+ 起始地址 + 写入值 + 带有成功标识的结果类对象 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 写入float数组,返回是否成功
+ Write float array, return whether the write was successful +
+ 起始地址 + 写入值 + 带有成功标识的结果类对象 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 写入double数据,返回是否成功
+ Write double data, return whether the write was successful +
+ 起始地址 + 写入值 + 带有成功标识的结果类对象 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 写入double数组,返回是否成功
+ Write double array, return whether the write was successful +
+ 起始地址 + 写入值 + 带有成功标识的结果类对象 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 写入字符串信息,编码为ASCII
+ Write string information, encoded as ASCII +
+ 起始地址 + 写入值 + 带有成功标识的结果类对象 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 写入字符串信息,需要指定的编码信息
+ Write string information, need to specify the encoding information +
+ 起始地址 + 写入值 + 指定的编码信息 + 带有成功标识的结果类对象 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 写入指定长度的字符串信息,如果超出,就截断字符串,如果长度不足,那就补0操作,编码为ASCII
+ Write string information of the specified length. If it exceeds the value, the string is truncated. + If the length is not enough, it is filled with 0 and the encoding is ASCII. +
+ 起始地址 + 写入值 + 字符串的长度 + 带有成功标识的结果类对象 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 写入指定长度的字符串信息,如果超出,就截断字符串,如果长度不足,那就补0操作,编码为指定的编码信息
+ Write string information of the specified length. If it exceeds the value, the string is truncated. If the length is not enough, + then the operation is complemented with 0 , you should specified the encoding information +
+ 起始地址 + 写入值 + 字符串的长度 + 指定的编码信息 + 带有成功标识的结果类对象 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 读取自定义的数据类型,需要继承自IDataTransfer接口,返回一个新的类型的实例对象。
+ To read a custom data type, you need to inherit from the IDataTransfer interface and return an instance object of a new type. +
+ 自定义的类型 + 起始地址 + 带有成功标识的自定义类型数据 + + 需要是定义一个类,选择好相对于的ByteTransform实例,才能调用该方法。 + + + 此处演示三菱的读取示例,先定义一个类,实现接口 + + 接下来就可以实现数据的读取了 + + +
+ + + 读取自定义的数据类型,需要继承自IDataTransfer接口,传入一个实例,对这个实例进行赋值,并返回该实例的对象。
+ To read a custom data type, you need to inherit from the IDataTransfer interface, pass in an instance, + assign a value to this instance, and return the object of the instance. +
+ 自定义的类型 + 起始地址 + 实例 + 带有成功标识的自定义类型数据 + + 需要是定义一个类,选择好相对于的ByteTransform实例,才能调用该方法。 + + + 此处演示三菱的读取示例,先定义一个类,实现接口 + + 接下来就可以实现数据的读取了 + + +
+ + + 写入自定义类型的数据,该类型必须继承自IDataTransfer接口
+ Write data of a custom type, which must inherit from the IDataTransfer interface +
+ 类型对象 + 起始地址 + 写入值 + 带有成功标识的结果类对象 + + 需要是定义一个类,选择好相对于的实例,才能调用该方法。 + + + 此处演示三菱的读取示例,先定义一个类,实现接口 + + 接下来就可以实现数据的读取了 + + +
+ + + 读取支持Hsl特性的数据内容,该特性为,详细参考api文档说明
+ Read the data content of the Hsl attribute. The attribute is , please refer to the api documentation for details. +
+ 自定义的数据类型对象 + 包含是否成功的结果对象 + + 此处演示西门子的读取示例,先定义一个类,重点是将需要读取的数据,写入到属性的特性中去。 + + 接下来就可以实现数据的读取了 + + +
+ + + 写入支持Hsl特性的数据,返回是否写入成功,该特性为,详细参考api文档说明
+ Write data that supports the Hsl attribute, and return whether the write was successful. The attribute is , please refer to the api documentation for details. +
+ 自定义的数据类型对象 + 包含是否成功的结果对象 + + 此处演示西门子的读取示例,先定义一个类,重点是将需要读取的数据,写入到属性的特性中去。 + + 接下来就可以实现数据的写入了 + + + +
+ + + 读取结构体类型的数据,根据结构体自身的定义,读取原始字节数组,然后解析出实际的结构体数据,结构体需要实现特性 + + 类型对象信息 + PLC的地址信息 + 读取的地址长度信息 + 如果成功,返回成功的结构体对象 + + 此处演示西门子的读取示例,先定义一个类,重点是将需要读取的数据,写入到属性的特性中去。 + + 接下来就可以实现数据的读取了 + + + + + + 异步批量读取字节数组信息,需要指定地址和长度,返回原始的字节数组
+ Asynchronous batch read byte array information, need to specify the address and length, return the original byte array +
+ 数据地址 + 数据长度 + 带有成功标识的byte[]数组 +
+ + + 异步写入原始的byte数组数据到指定的地址,返回是否写入成功
+ Asynchronously writes the original byte array data to the specified address, and returns whether the write was successful +
+ 起始地址 + 写入值 + 带有成功标识的结果类对象 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 异步批量读取数组信息,需要指定地址和长度,返回 数组
+ Asynchronously batch read array information, need to specify the address and length, return array +
+ 数据地址 + 数据长度 + 带有成功标识的byte[]数组 +
+ + + 异步读取单个的数据信息
+ Asynchronously read a single data message +
+ 数据地址 + 带有成功标识的byte[]数组 +
+ + + 异步批量写入数组数据,返回是否成功
+ Asynchronously batch write array data, return success +
+ 起始地址 + 写入值 + 带有成功标识的结果类对象 +
+ + + 异步批量写入数组数据,返回是否成功
+ Asynchronously batch write array data, return success +
+ 起始地址 + 写入值 + 带有成功标识的结果类对象 +
+ + + 异步读取16位的有符号的整型数据
+ Asynchronously read 16-bit signed integer data +
+ 起始地址 + 带有成功标识的short数据 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 异步读取16位的有符号整型数组
+ Asynchronously read 16-bit signed integer array +
+ 起始地址 + 读取的数组长度 + 带有成功标识的short数组 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 异步读取16位的无符号整型
+ Asynchronously read 16-bit unsigned integer +
+ 起始地址 + 带有成功标识的ushort数据 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 异步读取16位的无符号整型数组
+ Asynchronously read 16-bit unsigned integer array +
+ 起始地址 + 读取的数组长度 + 带有成功标识的ushort数组 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 异步读取32位的有符号整型
+ Asynchronously read 32-bit signed integer +
+ 起始地址 + 带有成功标识的int数据 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 异步读取32位有符号整型数组
+ Asynchronously read 32-bit signed integer array +
+ 起始地址 + 数组长度 + 带有成功标识的int数组 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 异步读取32位的无符号整型
+ Asynchronously read 32-bit unsigned integer +
+ 起始地址 + 带有成功标识的uint数据 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 异步读取32位的无符号整型数组
+ Asynchronously read 32-bit unsigned integer array +
+ 起始地址 + 数组长度 + 带有成功标识的uint数组 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 异步读取64位的有符号整型
+ Asynchronously read 64-bit signed integer +
+ 起始地址 + 带有成功标识的long数据 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 异步读取64位的有符号整型数组
+ Asynchronously read 64-bit signed integer array +
+ 起始地址 + 数组长度 + 带有成功标识的long数组 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 异步读取64位的无符号整型
+ Asynchronously read 64-bit unsigned integer +
+ 起始地址 + 带有成功标识的ulong数据 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 异步读取64位的无符号整型的数组
+ Asynchronously read 64-bit unsigned integer array +
+ 起始地址 + 数组长度 + 带有成功标识的ulong数组 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 异步读取单浮点数据
+ Asynchronously read single floating point data +
+ 起始地址 + 带有成功标识的float数据 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 异步读取单浮点精度的数组
+ Asynchronously read single floating point array +
+ 起始地址 + 数组长度 + 带有成功标识的float数组 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 异步读取双浮点的数据
+ Asynchronously read double floating point data +
+ 起始地址 + 带有成功标识的double数据 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 异步读取双浮点数据的数组
+ Asynchronously read double floating point data array +
+ 起始地址 + 数组长度 + 带有成功标识的double数组 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 异步读取字符串数据,默认为最常见的ASCII编码
+ Asynchronously read string data, default is the most common ASCII encoding +
+ 起始地址 + 数据长度 + 带有成功标识的string数据 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 异步使用指定的编码,读取字符串数据
+ Asynchronously reads string data using the specified encoding +
+ 起始地址 + 数据长度 + 指定的自定义的编码 + 带有成功标识的string数据 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 异步写入short数据,返回是否成功
+ Asynchronously write short data, returns whether success +
+ 起始地址 + 写入值 + 带有成功标识的结果类对象 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 异步写入short数组,返回是否成功
+ Asynchronously write short array, return whether the write was successful +
+ 起始地址 + 写入值 + 带有成功标识的结果类对象 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 异步写入ushort数据,返回是否成功
+ Asynchronously write ushort data, return whether the write was successful +
+ 起始地址 + 写入值 + 带有成功标识的结果类对象 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 异步写入ushort数组,返回是否成功
+ Asynchronously write ushort array, return whether the write was successful +
+ 起始地址 + 写入值 + 带有成功标识的结果类对象 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 异步写入int数据,返回是否成功
+ Asynchronously write int data, return whether the write was successful +
+ 起始地址 + 写入值 + 带有成功标识的结果类对象 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 异步写入int[]数组,返回是否成功
+ Asynchronously write int array, return whether the write was successful +
+ 起始地址 + 写入值 + 带有成功标识的结果类对象 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 异步写入uint数据,返回是否成功
+ Asynchronously write uint data, return whether the write was successful +
+ 起始地址 + 写入值 + 带有成功标识的结果类对象 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 异步写入uint[]数组,返回是否成功
+ Asynchronously write uint array, return whether the write was successful +
+ 起始地址 + 写入值 + 带有成功标识的结果类对象 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 异步写入long数据,返回是否成功
+ Asynchronously write long data, return whether the write was successful +
+ 起始地址 + 写入值 + 带有成功标识的结果类对象 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 异步写入long数组,返回是否成功
+ Asynchronously write long array, return whether the write was successful +
+ 起始地址 + 写入值 + 带有成功标识的结果类对象 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 异步写入ulong数据,返回是否成功
+ Asynchronously write ulong data, return whether the write was successful +
+ 起始地址 + 写入值 + 带有成功标识的结果类对象 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 异步写入ulong数组,返回是否成功
+ Asynchronously write ulong array, return whether the write was successful +
+ 起始地址 + 写入值 + 带有成功标识的结果类对象 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 异步写入float数据,返回是否成功
+ Asynchronously write float data, return whether the write was successful +
+ 起始地址 + 写入值 + 带有成功标识的结果类对象 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 异步写入float数组,返回是否成功
+ Asynchronously write float array, return whether the write was successful +
+ 起始地址 + 写入值 + 带有成功标识的结果类对象 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 异步写入double数据,返回是否成功
+ Asynchronously write double data, return whether the write was successful +
+ 起始地址 + 写入值 + 带有成功标识的结果类对象 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 异步写入double数组,返回是否成功
+ Asynchronously write double array, return whether the write was successful +
+ 起始地址 + 写入值 + 带有成功标识的结果类对象 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 异步写入字符串信息,编码为ASCII
+ Asynchronously write string information, encoded as ASCII +
+ 起始地址 + 写入值 + 带有成功标识的结果类对象 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 异步写入字符串信息,需要指定的编码信息
+ Asynchronously write string information, need to specify the encoding information +
+ 起始地址 + 写入值 + 指定的编码信息 + 带有成功标识的结果类对象 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + 异步写入指定长度的字符串信息,如果超出,就截断字符串,如果长度不足,那就补0操作,编码为ASCII
+ Asynchronously write string information of the specified length. If it exceeds the value, the string is truncated. + If the length is not enough, it is filled with 0 and the encoding is ASCII. +
+ 起始地址 + 写入值 + 字符串的长度 + 带有成功标识的结果类对象 +
+ + + 异步写入指定长度的字符串信息,如果超出,就截断字符串,如果长度不足,那就补0操作,编码为指定的编码信息
+ Asynchronously write string information of the specified length. If it exceeds the value, the string is truncated. If the length is not enough, + then the operation is complemented with 0 , you should specified the encoding information +
+ 起始地址 + 写入值 + 字符串的长度 + 指定的编码信息 + 带有成功标识的结果类对象 +
+ + + + 此处演示三菱的读取示例,先定义一个类,实现接口 + + 接下来就可以实现数据的读取了 + + + + + + + 此处演示三菱的读取示例,先定义一个类,实现接口 + + 接下来就可以实现数据的读取了 + + + + + + + 此处演示三菱的读取示例,先定义一个类,实现接口 + + 接下来就可以实现数据的读取了 + + + + + + 异步读取支持Hsl特性的数据内容,该特性为,详细参考api文档说明
+ Asynchronously read the data content of the Hsl attribute. The attribute is , please refer to the api documentation for details. +
+ 自定义的数据类型对象 + 包含是否成功的结果对象 + + 此处演示西门子的读取示例,先定义一个类,重点是将需要读取的数据,写入到属性的特性中去。 + + 接下来就可以实现数据的读取了 + + +
+ + + 异步写入支持Hsl特性的数据,返回是否写入成功,该特性为,详细参考api文档说明
+ Asynchronously write data that supports the Hsl attribute, and return whether the write was successful. The attribute is , please refer to the api documentation for details. +
+ 自定义的数据类型对象 + 包含是否成功的结果对象 + + 此处演示西门子的读取示例,先定义一个类,重点是将需要读取的数据,写入到属性的特性中去。 + + 接下来就可以实现数据的写入了 + + + +
+ + + + + + 所有的机器人的统一读写标准,统一的基本的读写操作
+ Unified reading and writing standards for all robots, unified basic reading and writing operations +
+
+ + + + + + 根据地址读取机器人的原始的字节数据信息
+ Read the robot's original byte data information according to the address +
+ 指定的地址信息,对于某些机器人无效 + 带有成功标识的byte[]数组 +
+ + + 根据地址读取机器人的字符串的数据信息
+ Read the string data information of the robot based on the address +
+ 地址信息 + 带有成功标识的字符串数据 +
+ + + 根据地址,来写入设备的相关的字节数据
+ According to the address, to write the device related bytes data +
+ 指定的地址信息,有些机器人可能不支持 + 原始的字节数据信息 + 是否成功的写入 +
+ + + 根据地址,来写入设备相关的字符串数据
+ According to the address, to write the device related string data +
+ 指定的地址信息,有些机器人可能不支持 + 字符串的数据信息 + 是否成功的写入 +
+ + + + + + + + + + + + + + + 异形客户端的基类,提供了基础的异形操作
+ The base class of the profiled client provides the basic profiled operation +
+
+ + + 默认的无参构造方法
+ The default parameterless constructor +
+
+ + + 当接收到了新的请求的时候执行的操作
+ An action performed when a new request is received +
+ 异步对象 + 终结点 +
+ + + 是否返回响应,默认为 True
+ The default is True +
+
+ + + 是否统一检查密码,如果每个会话需要自己检查密码,就需要设置为false
+ Whether to check the password uniformly, if each session needs to check the password by itself, it needs to be set to false +
+
+ + + 客户上线的委托事件 + + 异形客户端的会话信息 + + + + 当有服务器连接上来的时候触发
+ Triggered when a server is connected +
+
+ + + 获取返回的命令信息 + + 状态 + 回发的指令信息 + + + + 检测当前的DTU是否在线 + + 当前的会话信息 + 当前的会话是否在线 + + + + 检测当前的dtu是否允许登录 + + 当前的会话信息 + 当前的id是否可允许登录 + + + + 设置密码,需要传入长度为6的字节数组
+ To set the password, you need to pass in an array of bytes of length 6 +
+ 密码信息 +
+ + + 设置可信任的客户端列表,传入一个DTU的列表信息
+ Set up the list of trusted clients, passing in the list information for a DTU +
+ 客户端列表 +
+ + + 释放当前的对象 + + + + + + + + + + + + 状态登录成功 + + + + + 重复登录 + + + + + 禁止登录 + + + + + 密码错误 + + + + + 获取错误的描述信息 + + dtu信息 + 错误码 + 错误信息 + + + + 带登录认证的服务器类,可以对连接的客户端进行筛选,放行用户名密码正确的连接,并支持对在线的客户端对象进行管理
+ The server class with login authentication can filter connected clients, allow connections with correct username and password, and support online client objects +
+
+ + + 实例化一个默认的对象
+ instantiate a default object +
+
+ + + 当客户端的socket登录的时候额外检查的信息,检查当前会话的用户名和密码
+ Additional check information when the client's socket logs in, check the username and password of the current session +
+ 套接字 + 终结点 + 验证的结果 +
+ + + 获取或设置是否对客户端启动账号认证
+ Gets or sets whether to enable account authentication on the client +
+
+ + + 新增账户,如果想要启动账户登录,必须将设置为True
+ Add an account. If you want to activate account login, you must set to True +
+ 账户名称 + 账户名称 +
+ + + 删除一个账户的信息
+ Delete an account's information +
+ 账户名称 +
+ + + 当客户端登录后,在Ip信息的过滤后,然后触发本方法,进行后续的数据接收,处理,并返回相关的数据信息
+ When the client logs in, after filtering the IP information, this method is then triggered to perform subsequent data reception, + processing, and return related data information +
+ 网络套接字 + 终端节点 +
+ + + 从远程Socket异步接收的数据信息 + + 异步接收的对象 + + + + 当接收到了新的请求的时候执行的操作,此处进行账户的安全验证
+ The operation performed when a new request is received, and the account security verification is performed here +
+ 异步对象 + 终结点 +
+ + + 设置并启动受信任的客户端登录并读写,如果为null,将关闭对客户端的ip验证
+ Set and start the trusted client login and read and write, if it is null, the client's IP verification will be turned off +
+ 受信任的客户端列表 +
+ + + 检查该Ip地址是否是受信任的
+ Check if the IP address is trusted +
+ Ip地址信息 + 是受信任的返回True,否则返回False +
+ + + 获取受信任的客户端列表
+ Get a list of trusted clients +
+ 字符串数据信息 +
+ + + + + + 获取在线的客户端的数量
+ Get the number of clients online +
+
+ + + 表示客户端状态变化的委托信息
+ Delegate information representing the state change of the client +
+ 当前的服务器对象信息 + 当前的客户端会话信息 +
+ + + 当客户端上线时候的触发的事件
+ Event triggered when the client goes online +
+
+ + + 当客户端下线时候的触发的事件
+ Event triggered when the client goes offline +
+
+ + + 获取当前所有在线的客户端信息,包括IP地址和端口号信息
+ Get all current online client information, including IP address and port number information +
+
+ + + 获取或设置两次数据交互时的最小时间间隔,默认为24小时。如果超过该设定的时间不进行数据交互,服务器就会强制断开当前的连接操作。
+ Get or set the minimum time interval between two data interactions, the default is 24 hours. + If the data exchange is not performed for more than the set time, the server will forcibly disconnect the current connection operation. +
+ + 举例设置为10分钟,ActiveTimeSpan = TimeSpan.FromMinutes( 10 ); + +
+ + + 新增一个在线的客户端信息
+ Add an online client information +
+ 会话内容 +
+ + + 移除一个在线的客户端信息
+ Remove an online client message +
+ 会话内容 + 下线的原因 +
+ + + 释放当前的对象 + + 是否托管对象 + + + + + + + + + + 本系统所有网络类的基类,该类为抽象类,无法进行实例化,如果想使用里面的方法来实现自定义的网络通信,请通过继承使用。
+ The base class of all network classes in this system. This class is an abstract class and cannot be instantiated. + If you want to use the methods inside to implement custom network communication, please use it through inheritance. +
+ + 本类提供了丰富的底层数据的收发支持,包含消息的接收,MQTT以及Redis,websocket协议的实现 + +
+ + + 实例化一个NetworkBase对象,令牌的默认值为空,都是0x00
+ Instantiate a NetworkBase object, the default value of the token is empty, both are 0x00 +
+
+ + + 组件的日志工具,支持日志记录,只要实例化后,当前网络的基本信息,就以等级进行输出
+ The component's logging tool supports logging. As long as the instantiation of the basic network information, the output will be output at +
+ + 只要实例化即可以记录日志,实例化的对象需要实现接口 ,本组件提供了三个日志记录类,你可以实现基于 的对象。 + + 如下的实例化适用于所有的Network及其派生类,以下举两个例子,三菱的设备类及服务器类 + + + +
+ + + 网络类的身份令牌,在hsl协议的模式下会有效,在和设备进行通信的时候是无效的
+ Network-type identity tokens will be valid in the hsl protocol mode and will not be valid when communicating with the device +
+ + 适用于Hsl协议相关的网络通信类,不适用于设备交互类。 + + + 此处以 服务器类及 客户端类的令牌设置举例 + + + +
+ + + 文件传输的时候的缓存大小,直接影响传输的速度,值越大,传输速度越快,越占内存,默认为100K大小
+ The size of the cache during file transfer directly affects the speed of the transfer. The larger the value, the faster the transfer speed and the more memory it takes. The default size is 100K. +
+
+ + + 接收固定长度的字节数组,允许指定超时时间,默认为60秒,当length大于0时,接收固定长度的数据内容,当length小于0时,buffer长度的缓存数据
+ Receiving a fixed-length byte array, allowing a specified timeout time. The default is 60 seconds. When length is greater than 0, + fixed-length data content is received. When length is less than 0, random data information of a length not greater than 2048 is received. +
+ 网络通讯的套接字
Network communication socket + 等待接收的数据缓存信息 + 开始接收数据的偏移地址 + 准备接收的数据长度,当length大于0时,接收固定长度的数据内容,当length小于0时,接收不大于1024长度的随机数据信息 + 单位:毫秒,超时时间,默认为60秒,如果设置小于0,则不检查超时时间 + 当前接收数据的进度报告,有些协议支持传输非常大的数据内容,可以给与进度提示的功能 + 包含了字节数据的结果类 +
+ + + 接收固定长度的字节数组,允许指定超时时间,默认为60秒,当length大于0时,接收固定长度的数据内容,当length小于0时,接收不大于2048长度的随机数据信息
+ Receiving a fixed-length byte array, allowing a specified timeout time. The default is 60 seconds. When length is greater than 0, + fixed-length data content is received. When length is less than 0, random data information of a length not greater than 2048 is received. +
+ 网络通讯的套接字
Network communication socket + 准备接收的数据长度,当length大于0时,接收固定长度的数据内容,当length小于0时,接收不大于1024长度的随机数据信息 + 单位:毫秒,超时时间,默认为60秒,如果设置小于0,则不检查超时时间 + 当前接收数据的进度报告,有些协议支持传输非常大的数据内容,可以给与进度提示的功能 + 包含了字节数据的结果类 +
+ + + + + + + + + 接收一行命令数据,需要自己指定这个结束符,默认超时时间为60秒,也即是60000,单位是毫秒
+ To receive a line of command data, you need to specify the terminator yourself. The default timeout is 60 seconds, which is 60,000, in milliseconds. +
+ 网络套接字 + 结束符信息 + 超时时间,默认为60000,单位为毫秒,也就是60秒 + 带有结果对象的数据信息 +
+ + + 接收一行命令数据,需要自己指定这个结束符,默认超时时间为60秒,也即是60000,单位是毫秒
+ To receive a line of command data, you need to specify the terminator yourself. The default timeout is 60 seconds, which is 60,000, in milliseconds. +
+ 网络套接字 + 结束符1信息 + 结束符2信息 + /// 超时时间,默认无穷大,单位毫秒 + 带有结果对象的数据信息 +
+ + + 接收一条完整的 数据内容,需要指定超时时间,单位为毫秒。
+ Receive a complete data content, Need to specify a timeout period in milliseconds +
+ 网络的套接字 + 超时时间,单位:毫秒 + 消息的格式定义 + 接收消息的时候的进度报告 + 带有是否成功的byte数组对象 +
+ + + 发送消息给套接字,直到完成的时候返回,经过测试,本方法是线程安全的。
+ Send a message to the socket until it returns when completed. After testing, this method is thread-safe. +
+ 网络套接字 + 字节数据 + 发送是否成功的结果 +
+ + + 发送消息给套接字,直到完成的时候返回,经过测试,本方法是线程安全的。
+ Send a message to the socket until it returns when completed. After testing, this method is thread-safe. +
+ 网络套接字 + 字节数据 + 偏移的位置信息 + 发送的数据总数 + 发送是否成功的结果 +
+ + + + + + + + + 创建一个新的socket对象并连接到远程的地址,默认超时时间为10秒钟,需要指定ip地址以及端口号信息
+ Create a new socket object and connect to the remote address. The default timeout is 10 seconds. You need to specify the IP address and port number. +
+ Ip地址 + 端口号 + 返回套接字的封装结果对象 + + + +
+ + + 创建一个新的socket对象并连接到远程的地址,需要指定ip地址以及端口号信息,还有超时时间,单位是毫秒
+ To create a new socket object and connect to a remote address, you need to specify the IP address and port number information, and the timeout period in milliseconds +
+ Ip地址 + 端口号 + 连接的超时时间 + 返回套接字的封装结果对象 + + + +
+ + + 创建一个新的socket对象并连接到远程的地址,需要指定远程终结点,超时时间(单位是毫秒),如果需要绑定本地的IP或是端口,传入 local对象
+ To create a new socket object and connect to the remote address, you need to specify the remote endpoint, + the timeout period (in milliseconds), if you need to bind the local IP or port, pass in the local object +
+ 连接的目标终结点 + 连接的超时时间 + 如果需要绑定本地的IP地址,就需要设置当前的对象 + 返回套接字的封装结果对象 + + + +
+ + + 读取流中的数据到缓存区,读取的长度需要按照实际的情况来判断
+ Read the data in the stream to the buffer area. The length of the read needs to be determined according to the actual situation. +
+ 数据流 + 缓冲区 + 带有成功标志的读取数据长度 +
+ + + 将缓冲区的数据写入到流里面去
+ Write the buffer data to the stream +
+ 数据流 + 缓冲区 + 是否写入成功 +
+ + + 检查当前的头子节信息的令牌是否是正确的,仅用于某些特殊的协议实现
+ Check whether the token of the current header subsection information is correct, only for some special protocol implementations +
+ 头子节数据 + 令牌是验证成功 +
+ + + [自校验] 发送字节数据并确认对方接收完成数据,如果结果异常,则结束通讯
+ [Self-check] Send the byte data and confirm that the other party has received the completed data. If the result is abnormal, the communication ends. +
+ 网络套接字 + 头指令 + 用户指令 + 发送的数据 + 是否发送成功 +
+ + + [自校验] 发送字节数据并确认对方接收完成数据,如果结果异常,则结束通讯
+ [Self-check] Send the byte data and confirm that the other party has received the completed data. If the result is abnormal, the communication ends. +
+ 网络套接字 + 用户指令 + 发送的数据 + 是否发送成功 +
+ + + [自校验] 直接发送字符串数据并确认对方接收完成数据,如果结果异常,则结束通讯
+ [Self-checking] Send string data directly and confirm that the other party has received the completed data. If the result is abnormal, the communication ends. +
+ 网络套接字 + 用户指令 + 发送的数据 + 是否发送成功 +
+ + + [自校验] 直接发送字符串数组并确认对方接收完成数据,如果结果异常,则结束通讯
+ [Self-check] Send string array directly and confirm that the other party has received the completed data. If the result is abnormal, the communication ends. +
+ 网络套接字 + 用户指令 + 发送的字符串数组 + 是否发送成功 +
+ + + [自校验] 直接发送字符串数组并确认对方接收完成数据,如果结果异常,则结束通讯
+ [Self-check] Send string array directly and confirm that the other party has received the completed data. If the result is abnormal, the communication ends. +
+ 网络套接字 + 用户指令 + 用户名 + 密码 + 是否发送成功 +
+ + + [自校验] 接收一条完整的同步数据,包含头子节和内容字节,基础的数据,如果结果异常,则结束通讯
+ [Self-checking] Receive a complete synchronization data, including header subsection and content bytes, basic data, if the result is abnormal, the communication ends +
+ 套接字 + 超时时间设置,如果为负数,则不检查超时 + 包含是否成功的结果对象 + result +
+ + + [自校验] 从网络中接收一个字符串数据,如果结果异常,则结束通讯
+ [Self-checking] Receive a string of data from the network. If the result is abnormal, the communication ends. +
+ 套接字 + 接收数据的超时时间 + 包含是否成功的结果对象 +
+ + + [自校验] 从网络中接收一个字符串数组,如果结果异常,则结束通讯
+ [Self-check] Receive an array of strings from the network. If the result is abnormal, the communication ends. +
+ 套接字 + 接收数据的超时时间 + 包含是否成功的结果对象 +
+ + + [自校验] 从网络中接收一串字节数据,如果结果异常,则结束通讯
+ [Self-checking] Receive a string of byte data from the network. If the result is abnormal, the communication ends. +
+ 套接字的网络 + 超时时间 + 包含是否成功的结果对象 +
+ + + 从网络中接收Long数据
+ Receive Long data from the network +
+ 套接字网络 + long数据结果 +
+ + + 将long数据发送到套接字
+ Send long data to the socket +
+ 网络套接字 + long数据 + 是否发送成功 +
+ + + 发送一个流的所有数据到指定的网络套接字,需要指定发送的数据长度,支持按照百分比的进度报告
+ Send all the data of a stream to the specified network socket. You need to specify the length of the data to be sent. It supports the progress report in percentage. +
+ 套接字 + 内存流 + 发送的数据长度 + 进度报告的委托 + 进度报告是否按照百分比报告 + 是否成功的结果对象 +
+ + + 从套接字中接收所有的数据然后写入到指定的流当中去,需要指定数据的长度,支持按照百分比进行进度报告
+ Receives all data from the socket and writes it to the specified stream. The length of the data needs to be specified, and progress reporting is supported in percentage. +
+ 套接字 + 数据流 + 所有数据的长度 + 进度报告 + 进度报告是否按照百分比 + 是否成功的结果对象 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 从socket接收一条完整的websocket数据,返回的数据信息
+ Receive a complete websocket data from the socket, return the data information of the +
+ 网络套接字 + 包含websocket消息的结果内容 +
+ + + + + + + + + + + + 接收一条完整的MQTT协议的报文信息,包含控制码和负载数据
+ Receive a message of a completed MQTT protocol, including control code and payload data +
+ 网络套接字 + 超时时间 + 进度报告,第一个参数是已完成的字节数量,第二个参数是总字节数量。 + 结果数据内容 +
+ + + + + + 使用MQTT协议从socket接收指定长度的字节数组,然后全部写入到流中,可以指定进度报告
+ Use the MQTT protocol to receive a byte array of specified length from the socket, and then write all of them to the stream, and you can specify a progress report +
+ 网络套接字 + 数据流 + 数据大小 + 超时时间 + 进度报告,第一个参数是已完成的字节数量,第二个参数是总字节数量。 + AES数据加密对象,如果为空,则不进行加密 + 取消的令牌操作信息 + 是否操作成功 +
+ + + 使用MQTT协议将流中的数据读取到字节数组,然后都写入到socket里面,可以指定进度报告,主要用于将文件发送到网络。
+ Use the MQTT protocol to read the data in the stream into a byte array, and then write them all into the socket. + You can specify a progress report, which is mainly used to send files to the network. +
+ 网络套接字 + 流 + 总的数据大小 + 超时信息 + 进度报告,第一个参数是已完成的字节数量,第二个参数是总字节数量。 + AES数据加密对象,如果为空,则不进行加密 + 取消操作的令牌信息 + 是否操作成功 +
+ + + 使用MQTT协议将一个文件发送到网络上去,需要指定文件名,保存的文件名,可选指定文件描述信息,进度报告
+ To send a file to the network using the MQTT protocol, you need to specify the file name, the saved file name, + optionally specify the file description information, and the progress report +
+ 网络套接字 + 文件名称 + 对方接收后保存的文件名 + 文件的描述信息 + 进度报告,第一个参数是已完成的字节数量,第二个参数是总字节数量。 + AES数据加密对象,如果为空,则不进行加密 + 用户取消的令牌 + 是否操作成功 +
+ + + 使用MQTT协议将一个数据流发送到网络上去,需要保存的文件名,可选指定文件描述信息,进度报告
+ Use the MQTT protocol to send a data stream to the network, the file name that needs to be saved, optional file description information, progress report +
+ 网络套接字 + 数据流 + 对方接收后保存的文件名 + 文件的描述信息 + 进度报告,第一个参数是已完成的字节数量,第二个参数是总字节数量。 + AES数据加密对象,如果为空,则不进行加密 + 用户取消的令牌信息 + 是否操作成功 +
+ + + 使用MQTT协议从网络接收字节数组,然后写入文件或流中,支持进度报告
+ Use MQTT protocol to receive byte array from the network, and then write it to file or stream, support progress report +
+ 网络套接字 + 文件名或是流 + 进度报告 + AES数据加密对象,如果为空,则不进行加密 + 用户取消的令牌信息 + 是否操作成功,如果成功,携带文件基本信息 +
+ + + + + + + + + + + + + + + + + + + + + + + + 接收一行基于redis协议的字符串的信息,需要指定固定的长度
+ Receive a line of information based on the redis protocol string, you need to specify a fixed length +
+ 网络套接字 + 字符串的长度 + 带有结果对象的数据信息 +
+ + + 从网络接收一条完整的redis报文的消息
+ Receive a complete redis message from the network +
+ 网络套接字 + 接收的结果对象 +
+ + + + + + + + + 接收一条hsl协议的数据信息,自动解析,解压,解码操作,获取最后的实际的数据,接收结果依次为暗号,用户码,负载数据
+ Receive a piece of hsl protocol data information, automatically parse, decompress, and decode operations to obtain the last actual data. + The result is a opCode, user code, and payload data in order. +
+ 网络套接字 + 接收结果,依次为暗号,用户码,负载数据 +
+ + + + + + 从Socket接收一条VigorPLC的消息数据信息,指定套接字对象及超时时间
+ Receive a message data information of VigorPLC from Socket, specify socket object and timeout time +
+ 套接字对象 + 超时时间 + 接收的结果内容 +
+ + + + + + 删除一个指定的文件,如果文件不存在,直接返回 True,如果文件存在则直接删除,删除成功返回 True,如果发生了异常,返回False
+ Delete a specified file, if the file does not exist, return True directly, if the file exists, delete it directly, + if the deletion is successful, return True, if an exception occurs, return False +
+ 完整的文件路径 + 是否删除成功 +
+ + + + + + 基于连接的CIP协议的基类 + + + + + 实例化一个默认的对象 + + + + + + + + + + + + + + + + + + + + + + + + + + O -> T Network Connection ID + + + + + T -> O Network Connection ID + + + + + 将多个的CIP命令打包成一个服务的命令 + + CIP命令列表 + 服务命令 + + + + 获取数据通信的前置打开命令,不同的PLC的信息不一样。 + + 连接的ID信息 + 原始命令数据 + + + + 获取数据通信的后置关闭命令,不同的PLC的信息不一样。 + + 原始命令数据 + + + + 从PLC反馈的数据解析出真实的数据内容,结果内容分别是原始字节数据,数据类型代码,是否有很多的数据
+ The real data content is parsed from the data fed back by the PLC. The result content is the original byte data, + the data type code, and whether there is a lot of data. +
+ PLC的反馈数据 + 是否是返回的操作 + 带有结果标识的最终数据 +
+ + + 所有虚拟的数据服务器的基类,提供了基本的数据读写,存储加载的功能方法,具体的字节读写需要继承重写。
+ The base class of all virtual data servers provides basic methods for reading and writing data and storing and loading. + Specific byte reads and writes need to be inherited and override. +
+
+ + + 实例化一个默认的数据服务器的对象
+ Instantiate an object of the default data server +
+
+ + + 将本系统的数据池数据存储到指定的文件
+ Store the data pool data of this system to the specified file +
+ 指定文件的路径 + + + + + + + + +
+ + + 从文件加载数据池信息
+ Load datapool information from a file +
+ 文件路径 + + + + + + + + +
+ + + 从字节数据加载数据信息,需要进行重写方法
+ Loading data information from byte data requires rewriting method +
+ 字节数据 +
+ + + 将数据信息存储到字节数组去,需要进行重写方法
+ To store data information into a byte array, a rewrite method is required +
+ 所有的内容 +
+ + + + + + + + + 获取或设置当前的服务器接收串口数据时候,是否强制只接收一次数据,默认为false,适合点对点通信,如果你总线形式的连接,则需要设置 True
+ Get or set whether to force the data to be received only once when the current server receives serial port data. The default value is false, + which is suitable for point-to-point communication. If you have a bus connection, you need to set True +
+
+ + + 获取或设置当前的服务器是否允许远程客户端进行写入数据操作,默认为True
+ Gets or sets whether the current server allows remote clients to write data, the default is True +
+ + 如果设置为False,那么所有远程客户端的操作都会失败,直接返回错误码或是关闭连接。 + +
+ + + 当接收到来自客户的数据信息时触发的对象,该数据可能来自tcp或是串口
+ The object that is triggered when receiving data information from the customer, the data may come from tcp or serial port +
+ 触发的服务器对象 + 消息的来源对象 + 实际的数据信息 +
+ + + 接收到数据的时候就触发的事件,示例详细参考API文档信息
+ An event that is triggered when data is received +
+ + 事件共有三个参数,sender指服务器本地的对象,例如 对象,source 指会话对象,网口对象为 , + 串口为 对象,需要根据实际判断,data 为收到的原始数据 byte[] 对象 + + + 我们以Modbus的Server为例子,其他的虚拟服务器同理,因为都集成自本服务器对象 + + +
+ + + 触发一个数据接收的事件信息
+ Event information that triggers a data reception +
+ 数据的发送方 + 接收数据信息 +
+ + + 数据发送的时候委托
+ Show DataSend To PLC +
+ 数据发送对象 + 数据内容 +
+ + + 数据发送的时候就触发的事件
+ Events that are triggered when data is sent +
+
+ + + 触发一个数据发送的事件信息
+ Event information that triggers a data transmission +
+ 数据内容 +
+ + + 获取串口模式下消息的日志记录方式,可以继承重写。
+ Get the logging method of messages in serial mode, which can be inherited and rewritten. +
+ 原始数据 + 是否是TCP相关的 + 消息 +
+ + + + + + + + + + + + + + + + + + 从远程Socket异步接收的数据信息 + + 异步接收的对象 + + + + 获取或设置串口模式下,接收一条数据最短的时间要求,当设备发送的数据非常慢的时候,或是分割发送数据的时候,就需要将本值设置的大一点,默认为20ms
+ Get or set the shortest time required to receive a piece of data in serial port mode. + When the data sent by the device is very slow, or when the data is divided and sent, you need to set this value to a larger value, the default is 20ms +
+
+ + + 启动串口的从机服务,使用默认的参数进行初始化串口,9600波特率,8位数据位,无奇偶校验,1位停止位
+ Start the slave service of serial, initialize the serial port with default parameters, 9600 baud rate, 8 data bits, no parity, 1 stop bit +
+ + com支持格式化的方式,例如输入 COM3-9600-8-N-1,COM5-19200-7-E-2,其中奇偶校验的字母可选,N:无校验,O:奇校验,E:偶校验,停止位可选 0, 1, 2, 1.5 四种选项 + + 串口信息 +
+ + + 启动串口的从机服务,使用默认的参数进行初始化串口,8位数据位,无奇偶校验,1位停止位
+ Start the slave service of serial, initialize the serial port with default parameters, 8 data bits, no parity, 1 stop bit +
+ 串口信息 + 波特率 +
+ + + 启动串口的从机服务,使用指定的参数进行初始化串口,指定数据位,指定奇偶校验,指定停止位
+
+ 串口信息 + 波特率 + 数据位 + 奇偶校验 + 停止位 +
+ + + 启动串口的从机服务,使用自定义的初始化方法初始化串口的参数
+ Start the slave service of serial and initialize the parameters of the serial port using a custom initialization method +
+ 初始化信息的委托 +
+ + + 关闭提供从机服务的串口对象
+ Close the serial port object that provides slave services +
+
+ + + 接收到串口数据的时候触发 + + 串口对象 + 消息 + + + + 检查串口接收的数据是否完成的方法,如果接收完成,则返回True + + 缓存的数据信息 + 当前已经接收的数据长度信息 + 是否接收完成 + + + + 处理串口接收数据的功能方法,需要在继承类中进行相关的重写操作 + + 串口接收到的原始字节数据 + + + + 获取当前的串口对象信息 + + 串口对象 + + + + 释放当前的对象 + + 是否托管对象 + + + + 接收一次的数据的最少时间,当重写了报文结束的检查代码时,可以适当的将本值设置的大一点。
+ The minimum time to receive the data once, when the check code of the end of the message is rewritten, this value can be appropriately set larger. +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 设备交互类的基类,实现了接口的基础方法方法,需要使用继承重写来实现字节读写,bool读写操作。
+ The base class of the device interaction class, which implements the basic methods of the interface, + requires inheritance rewriting to implement byte read and write, and bool read and write operations. +
+ 需要继承实现采用使用。 +
+ + + 一个字单位的数据表示的地址长度,西门子为2,三菱,欧姆龙,modbusTcp就为1,AB PLC无效
+ The address length represented by one word of data, Siemens is 2, Mitsubishi, Omron, modbusTcp is 1, AB PLC is invalid +
+ + 对设备来说,一个地址的数据对应的字节数,或是1个字节或是2个字节,4个字节,通常是这四个选择,当设置为0时,则表示4字节的地址长度信息
+ For the device, the number of bytes corresponding to the data of an address, either 1 byte or 2 bytes, 4 bytes, usually these four choices, when set to 0, it means 4 words Section address length information +
+
+ + + 一个字单位的数据表示的地址长度,西门子为2,三菱,欧姆龙,modbusTcp就为1,AB PLC无效
+ The address length represented by one word of data, Siemens is 2, Mitsubishi, Omron, modbusTcp is 1, AB PLC is invalid +
+ + 对设备来说,一个地址的数据对应的字节数,或是1个字节或是2个字节,通常是这两个选择。
+ 当前也可以重写来根据不同的地址动态控制不同的地址长度,比如有的地址是一个地址一个字节的,有的地址是一个地址两个字节的 +
+ 读取的设备的地址信息 + 读取的数据长度信息 + 数据类型的字节长度信息,比如short, 就是2,int,float就是4 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 支持长连接,短连接两个模式的通用客户端基类
+ Universal client base class that supports long connections and short connections to two modes +
+ + 无,请使用继承类实例化,然后进行数据交互,当前的类并没有具体的实现。 + +
+ + + 默认的无参构造函数
+ Default no-parameter constructor +
+
+ + + 当前的网络的管道信息 + + + + + 是否是长连接的状态
+ Whether it is a long connection state +
+
+ + + 设置日志记录报文是否二进制,如果为False,那就使用ASCII码
+ Set whether the log message is binary, if it is False, then use ASCII code +
+
+ + + 获取或设置当前的连接是否激活从服务器主动推送的功能 + + + + + 获取一个新的消息对象的方法,需要在继承类里面进行重写
+ The method to get a new message object needs to be overridden in the inheritance class +
+ 消息类对象 +
+ + + 当前的数据变换机制,当你需要从字节数据转换类型数据的时候需要。
+ The current data transformation mechanism is required when you need to convert type data from byte data. +
+ + 在HSL里提供了三种数据变换机制,分别是 , , + ,各自的属性也可以自定调整,基本满足所有的情况使用。
+ Three data transformation mechanisms are provided in HSL, namely , , + , and their respective property can also be adjusted by itself, basically satisfying all situations. +
+ + 主要是用来转换数据类型的,下面仅仅演示了2个方法,其他的类型转换,类似处理。 + + +
+ + + 获取或设置连接的超时时间,单位是毫秒
+ Gets or sets the timeout for the connection, in milliseconds +
+ + 设置1秒的超时的示例 + + + + 不适用于异形模式的连接。 + +
+ + + 获取或设置接收服务器反馈的时间,如果为负数,则不接收反馈
+ Gets or sets the time to receive server feedback, and if it is a negative number, does not receive feedback +
+ + 设置1秒的接收超时的示例 + + + + 超时的通常原因是服务器端没有配置好,导致访问失败,为了不卡死软件,所以有了这个超时的属性。 + +
+ + + 获取或是设置远程服务器的IP地址,如果是本机测试,那么需要设置为127.0.0.1
+ Get or set the IP address of the remote server. If it is a local test, then it needs to be set to 127.0.0.1 +
+ + 最好实在初始化的时候进行指定,当使用短连接的时候,支持动态更改,切换;当使用长连接后,无法动态更改
+ 支持使用域名的网址方式,例如:www.hslcommunication.cn +
+ + 以下举例modbus-tcp的短连接及动态更改ip地址的示例 + + +
+ + + 获取或设置服务器的端口号,具体的值需要取决于对方的配置
+ Gets or sets the port number of the server. The specific value depends on the configuration of the other party. +
+ + 最好实在初始化的时候进行指定,当使用短连接的时候,支持动态更改,切换;当使用长连接后,无法动态更改 + + + 动态更改请参照 属性的更改。 + +
+ + + + + + 获取或设置在正式接收对方返回数据前的时候,需要休息的时间,当设置为0的时候,不需要休息。
+ Get or set the time required to rest before officially receiving the data from the other party. When it is set to 0, no rest is required. +
+
+ + + 获取或设置绑定的本地的IP地址和端口号信息,如果端口设置为0,代表任何可用的端口
+ Get or set the bound local IP address and port number information, if the port is set to 0, it means any available port +
+ + 默认为NULL, 也即是不绑定任何本地的IP及端口号信息,使用系统自动分配的方式。
+ The default is NULL, which means that no local IP and port number information are bound, and the system automatically assigns it. +
+
+ + + 当前的异形连接对象,如果设置了异形连接的话,仅用于异形模式的情况使用
+ The current alien connection object, if alien connection is set, is only used in the case of alien mode +
+ + 具体的使用方法请参照Demo项目中的异形modbus实现。 + +
+ + + + + + 获取或设置在发送通信报文前追加发送的字节信息,HEX格式,通常用于lora组网时,需要携带 00 00 00 02 四个字节的站地址功能。
+ Obtain or set the byte information sent before sending communication packets, HEX format, usually used for LORA networking, you need to carry 00 00 00 02 four-byte station address function. +
+
+ + + 设置一个新的网络管道,一般来说不需要调用本方法,当多个网口设备共用一个网络连接时才需要使用本方法进行设置共享的管道。
+ To set up a new network channel, generally speaking, you do not need to call this method. This method is only needed to set up a shared channel when multiple network port devices share a network connection. +
+ + 如果需要设置共享的网络管道的话,需要是设备类对象实例化之后立即进行设置。
+ If you need to set up a shared network pipe, you need to set it immediately after the device class object is instantiated. +
+ 共享的网络通道 +
+ + + 获取当前用于通信的管道信息
+ Get the current pipe information used for communication +
+ 管道对象 +
+ + + 在读取数据之前可以调用本方法将客户端设置为长连接模式,相当于跳过了ConnectServer的结果验证,对异形客户端无效,当第一次进行通信时再进行创建连接请求。
+ Before reading the data, you can call this method to set the client to the long connection mode, which is equivalent to skipping the result verification of ConnectServer, + and it is invalid for the alien client. When the first communication is performed, the connection creation request is performed. +
+ + 以下的方式演示了另一种长连接的机制 + + +
+ + + 对当前设备的IP地址进行PING的操作,返回PING的结果,正常来说,返回
+ PING the IP address of the current device and return the PING result. Normally, it returns +
+ 返回PING的结果 +
+ + + 尝试连接远程的服务器,如果连接成功,就切换短连接模式到长连接模式,后面的每次请求都共享一个通道,使得通讯速度更快速
+ Try to connect to a remote server. If the connection is successful, switch the short connection mode to the long connection mode. + Each subsequent request will share a channel, making the communication speed faster. +
+ 返回连接结果,如果失败的话(也即IsSuccess为False),包含失败信息 + + 简单的连接示例,调用该方法后,连接设备,创建一个长连接的对象,后续的读写操作均公用一个连接对象。 + + 如果想知道是否连接成功,请参照下面的代码。 + + +
+ + + 使用指定的套接字创建异形客户端,在异形客户端的模式下,网络通道需要被动创建。
+ Use the specified socket to create the alien client. In the alien client mode, the network channel needs to be created passively. +
+ 异形客户端对象,查看类型创建的客户端 + 通常都为成功 + + 简单的创建示例。 + + 如果想知道是否创建成功。通常都是成功。 + + + + 不能和之前的长连接和短连接混用,详细参考 Demo程序 + +
+ + + 使用一个MQTT中转服务器来连接设备对象,并进行相关的读取操作 + + MQTT客户端信息 + 获取数据的主题 + 写入数据的主题信息 + 是否成功 + + + + 手动断开与远程服务器的连接,如果当前是长连接模式,那么就会切换到短连接模式
+ Manually disconnect from the remote server, if it is currently in long connection mode, it will switch to short connection mode +
+ 关闭连接,不需要查看IsSuccess属性查看 + + 直接关闭连接即可,基本上是不需要进行成功的判定 + + +
+ + + 决定当前的消息是否是应答机制的消息内容,需要在客户端进行重写实现,如果是应答机制,返回 True, 否则返回 False
+ To determine whether the current message is the message content of the response mechanism, + it needs to be rewritten on the client side. If it is the response mechanism, return True, otherwise return False +
+ 通信使用的网络套接字 + 服务器返回的内容 + 是否应答机制的数据报文 +
+ + + 根据实际的协议选择是否重写本方法,有些协议在创建连接之后,需要进行一些初始化的信号握手,才能最终建立网络通道。
+ Whether to rewrite this method is based on the actual protocol. Some protocols require some initial signal handshake to establish a network channel after the connection is created. +
+ 网络套接字 + 是否初始化成功,依据具体的协议进行重写 + + 有些协议不需要握手信号,比如三菱的MC协议,Modbus协议,西门子和欧姆龙就存在握手信息,此处的例子是继承本类后重写的西门子的协议示例 + + +
+ + + 根据实际的协议选择是否重写本方法,有些协议在断开连接之前,需要发送一些报文来关闭当前的网络通道
+ Select whether to rewrite this method according to the actual protocol. Some protocols need to send some packets to close the current network channel before disconnecting. +
+ 网络套接字 + + 目前暂无相关的示例,组件支持的协议都不用实现这个方法。 + + 当断开连接时额外的操作结果 +
+ + + 和服务器交互完成的时候调用的方法,可以根据读写结果进行一些额外的操作,具体的操作需要根据实际的需求来重写实现
+ The method called when the interaction with the server is completed can perform some additional operations based on the read and write results. + The specific operations need to be rewritten according to actual needs. +
+ 读取结果 +
+ + + 是否使用账号登录,这个账户登录的功能是HSL组件创建的服务器特有的功能。
+ Whether to log in using an account. The function of this account login is a server-specific function created by the HSL component. +
+
+ + + 设置当前的登录的账户名和密码信息,并启用账户验证的功能,账户名为空时设置不生效
+ Set the current login account name and password information, and enable the account verification function. The account name setting will not take effect when it is empty +
+ + 当对方的服务器是使用HslCommunication创建的虚拟服务器时,例如modbus服务器,西门子s7服务器等等,就支持进行账户名验证操作,此时的客户端连接之前,就需要调用本方法设置账户密码信息。
+ When the other party's server is a virtual server created by HslCommunication, such as modbus server, Siemens s7 server, etc., + it supports account name verification operation. At this time, before the client connects, you need to call this method to set account password information. +
+ 账户名 + 密码 +
+ + + 认证账号,根据已经设置的用户名和密码,进行发送服务器进行账号认证。
+ Authentication account, according to the user name and password that have been set, sending server for account authentication. +
+ 套接字 + 认证结果 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 检查当前从网口接收的数据是否是完整的,如果是完整的,则需要返回 True,表示数据接收立即完成,默认返回 True
+ Check whether the data currently received from the network port is complete, and if it is complete, + you need to return True, indicating that the data reception is completed immediately, and the default value is True +
+ + 在默认情况下,网口在接收数据之后,直接认为本次的数据接收已经完成,如果碰到有结束标记的协议,则可以重写本方法,然后加入额外的验证信息,直到全部数据接收完成。
+ By default, after receiving data, the network port directly believes that the data reception has been completed, + if it encounters a protocol with an end tag, you can override this method, and then add additional verification information until all data is received. +
+ 目前已经接收到数据流 + 如果数据接收完成,则返回True, 否则返回False +
+ + + 对当前的命令进行打包处理,通常是携带命令头内容,标记当前的命令的长度信息,需要进行重写,否则默认不打包
+ The current command is packaged, usually carrying the content of the command header, marking the length of the current command, + and it needs to be rewritten, otherwise it is not packaged by default +
+ + 对发送的命令打包之后,直接发送给真实的对方设备了,例如在AB-PLC里面,就重写了打包方法,将当前的会话ID参数传递给PLC设备
+ After packaging the sent command, it is directly sent to the real counterpart device. For example, in AB-PLC, + the packaging method is rewritten and the current session ID parameter is passed to the PLC device. +
+ 发送的数据命令内容 + 打包之后的数据结果信息 +
+ + + 根据对方返回的报文命令,对命令进行基本的拆包,例如各种Modbus协议拆包为统一的核心报文,还支持对报文的验证
+ According to the message command returned by the other party, the command is basically unpacked, for example, + various Modbus protocols are unpacked into a unified core message, and the verification of the message is also supported +
+ + 在实际解包的操作过程中,通常对状态码,错误码等消息进行判断,如果校验不通过,将携带错误消息返回
+ During the actual unpacking operation, the status code, error code and other messages are usually judged. If the verification fails, the error message will be returned. +
+ 发送的原始报文数据 + 设备方反馈的原始报文内容 + 返回拆包之后的报文信息,默认不进行任何的拆包操作 +
+ + + 获取本次操作的可用的网络通道,如果是短连接,就重新生成一个新的网络通道,如果是长连接,就复用当前的网络通道。
+ Obtain the available network channels for this operation. If it is a short connection, a new network channel is regenerated. + If it is a long connection, the current network channel is reused. +
+ 是否成功,如果成功,使用这个套接字 +
+ + + 尝试连接服务器,如果成功,并执行的初始化方法,并返回最终的结果。
+ Attempt to connect to the server, if successful, and execute the initialization method of , and return the final result. +
+ 带有socket的结果对象 +
+ + + 将数据报文发送指定的网络通道上,根据当前指定的类型,返回一条完整的数据指令
+ Sends a data message to the specified network channel, and returns a complete data command according to the currently specified type +
+ 指定的套接字 + 发送的完整的报文信息 + 是否有等待的数据返回,默认为 true + 是否需要对命令重新打包,在重写方法后才会有影响 + + 无锁的基于套接字直接进行叠加协议的操作。 + + + 假设你有一个自己的socket连接了设备,本组件可以直接基于该socket实现modbus读取,三菱读取,西门子读取等等操作,前提是该服务器支持多协议,虽然这个需求听上去比较变态,但本组件支持这样的操作。 + + + 接收的完整的报文信息 +
+ + + + + + + + + 将数据发送到当前的网络通道中,并从网络通道中接收一个指定的完整的报文,网络通道将根据方法自动获取,本方法是线程安全的。
+ Send data to the current network channel and receive a complete message specified by from the network channel. + The network channel will be automatically obtained according to the method This method is thread-safe. +
+ 发送的完整的报文信息 + 是否有等待的数据返回,默认为 true + 是否需要对命令重新打包,在重写方法后才会有影响 + 接收的完整的报文信息 + + 本方法用于实现本组件还未实现的一些报文功能,例如有些modbus服务器会有一些特殊的功能码支持,需要收发特殊的报文,详细请看示例 + + + 此处举例有个modbus服务器,有个特殊的功能码0x09,后面携带子数据0x01即可,发送字节为 0x00 0x00 0x00 0x00 0x00 0x03 0x01 0x09 0x01 + + +
+ + + 释放当前的资源,并自动关闭长连接,如果设置了的话 + + 是否释放托管的资源信息 + + + + 释放当前的资源,如果调用了本方法,那么该对象再使用的时候,需要重新实例化。
+ Release the current resource. If this method is called, the object needs to be instantiated again when it is used again. +
+
+ + + + + + 文件服务器类的基类,为直接映射文件模式和间接映射文件模式提供基础的方法支持,主要包含了对文件的一些操作的功能
+ The base class of the file server class, which provides basic method support for the direct mapping file mode and the indirect mapping file mode, and mainly includes the functions of some operations on files +
+
+ + + 实例化一个默认的对象 + + + + + 获取当前文件的读写锁,如果没有会自动创建,文件名应该是guid文件名,例如 b35a11ec533147ca80c7f7d1713f015b7909
+ Acquire the read-write lock of the current file. If not, it will be created automatically. + The file name should be the guid file name, for example, b35a11ec533147ca80c7f7d1713f015b7909 +
+ 完整的文件路径 + 返回携带文件信息的读写锁 +
+ + + 接收本次操作的信息头数据 + + 网络套接字 + 是否成功的结果对象 + + + + 接收本次操作的信息头数据 + + 网络套接字 + 是否成功的结果对象 + + + + 获取一个随机的文件名,由GUID码和随机数字组成 + + 文件名 + + + + 返回服务器的绝对路径,包含根目录的信息 [Root Dir][Factory][Group][Id] 信息 + + 第一大类 + 第二大类 + 第三大类 + 是否成功的结果对象 + + + + 返回服务器的绝对路径,包含根目录的信息 [Root Dir][Factory][Group][Id][FileName] 信息 + + 第一大类 + 第二大类 + 第三大类 + 文件名 + 是否成功的结果对象 + + + + 返回相对路径的名称 + + 第一大类 + 第二大类 + 第三大类 + 文件名 + 是否成功的结果对象 + + + + 移动一个文件到新的文件去 + + 旧的文件名称 + 新的文件名称 + 是否成功 + + + + 删除文件并回发确认信息,如果结果异常,则结束通讯 + + 网络套接字 + 完整路径的文件名称 + 是否成功的结果对象 + + + + 文件上传的委托 + + 文件的基本信息 + + + + 文件上传的事件,当文件上传的时候触发。 + + + + + 触发一个文件上传的事件。 + + 文件的基本信息 + + + + 服务器启动时的操作 + + + + + 检查文件夹是否存在,不存在就创建 + + + + + 文件所存储的路径 + + + + + 获取当前的文件标记的对象数量
+ Get the number of objects marked by the current file +
+
+ + + + + + 获取文件夹的所有文件列表 + + 第一大类 + 第二大类 + 第三大类 + 文件列表 + + + + 获取文件夹的所有文件夹列表 + + 第一大类 + 第二大类 + 第三大类 + 文件夹列表 + + + + + + + Udp服务器程序的基础类,提供了启动服务器的基本实现,方便后续的扩展操作。
+ The basic class of the udp server program provides the basic implementation of starting the server to facilitate subsequent expansion operations. +
+
+ + + 实例化一个默认的对象
+ Instantiate a default object +
+
+ + + 服务器引擎是否启动
+ Whether the server engine is started +
+
+ + + 获取或设置服务器的端口号,如果是设置,需要在服务器启动前设置完成,才能生效。
+ Gets or sets the port number of the server. If it is set, it needs to be set before the server starts to take effect. +
+ 需要在服务器启动之前设置为有效 +
+ + + 后台接收数据的线程 + + + + + 当客户端的socket登录的时候额外检查的操作,并返回操作的结果信息。
+ The operation is additionally checked when the client's socket logs in, and the result information of the operation is returned. +
+ 套接字 + 终结点 + 验证的结果 +
+ + + 服务器启动时额外的初始化信息,可以用于启动一些额外的服务的操作。
+ The extra initialization information when the server starts can be used to start some additional service operations. +
+ 需要在派生类中重写 +
+ + + 指定端口号来启动服务器的引擎
+ Specify the port number to start the server's engine +
+ 指定一个端口号 +
+ + + 使用已经配置好的端口启动服务器的引擎
+ Use the configured port to start the server's engine +
+
+ + + 服务器关闭的时候需要做的事情
+ Things to do when the server is down +
+
+ + + 关闭服务器的引擎
+ Shut down the server's engine +
+
+ + + + + + 服务器程序的基础类,提供了启动服务器的基本实现,方便后续的扩展操作。
+ The basic class of the server program provides the basic implementation of starting the server to facilitate subsequent expansion operations. +
+
+ + + 实例化一个默认的对象
+ Instantiate a default object +
+
+ + + 服务器引擎是否启动
+ Whether the server engine is started +
+
+ + + 获取或设置服务器的端口号,如果是设置,需要在服务器启动前设置完成,才能生效。
+ Gets or sets the port number of the server. If it is set, it needs to be set before the server starts to take effect. +
+ 需要在服务器启动之前设置为有效 +
+ + + 获取或设置服务器是否支持IPv6的地址协议信息
+ Get or set whether the server supports IPv6 address protocol information +
+ + 默认为 False,也就是不启动 + +
+ + + 获取或设置客户端的Socket的心跳时间信息,这个是Socket底层自动实现的心跳包,不基于协议层实现。默认小于0,不开启心跳检测,如果需要开启,设置 60_000 比较合适,单位毫秒
+ Get or set the heartbeat time information of the Socket of the client. This is the heartbeat packet automatically implemented by the bottom layer of the Socket, not based on the protocol layer. + The default value is less than 0, and heartbeat detection is not enabled. If you need to enable it, it is more appropriate to set 60_000, in milliseconds. +
+ + 经测试,在linux上,基于.net core3.1的程序运行时,设置了这个值是无效的。 + +
+ + + 异步传入的连接申请请求
+ Asynchronous incoming connection request +
+ 异步对象 +
+ + + 当客户端连接到服务器,并听过额外的检查后,进行回调的方法
+ Callback method when the client connects to the server and has heard additional checks +
+ socket对象 + 远程的终结点 +
+ + + 当客户端的socket登录的时候额外检查的操作,并返回操作的结果信息。
+ The operation is additionally checked when the client's socket logs in, and the result information of the operation is returned. +
+ 套接字 + 终结点 + 验证的结果 +
+ + + 服务器启动时额外的初始化信息,可以用于启动一些额外的服务的操作。
+ The extra initialization information when the server starts can be used to start some additional service operations. +
+ 需要在派生类中重写 +
+ + + 指定端口号来启动服务器的引擎
+ Specify the port number to start the server's engine +
+ 指定一个端口号 +
+ + + 使用已经配置好的端口启动服务器的引擎
+ Use the configured port to start the server's engine +
+
+ + + 服务器关闭的时候需要做的事情
+ Things to do when the server is down +
+
+ + + 关闭服务器的引擎
+ Shut down the server's engine +
+
+ + + 创建一个指定的异形客户端连接,使用Hsl协议来发送注册包
+ Create a specified profiled client connection and use the Hsl protocol to send registration packets +
+ Ip地址 + 端口号 + 设备唯一ID号,最长11 + 密码信息 + 是否成功连接 +
+ + + + + + + + + 基于Udp的应答式通信类
+ Udp - based responsive communication class +
+
+ + + 实例化一个默认的方法
+ Instantiate a default method +
+
+ + + + + + + + + + + + + + + 获取或设置一次接收时的数据长度,默认2KB数据长度,特殊情况的时候需要调整
+ Gets or sets the length of data received at a time. The default length is 2KB +
+
+ + + + + + + + + + + + + + + + + + + + + 核心的数据交互读取,发数据发送到通道上去,然后从通道上接收返回的数据
+ The core data is read interactively, the data is sent to the serial port, and the returned data is received from the serial port +
+ 完整的报文内容 + 是否有等待的数据返回,默认为 true + 是否需要对命令重新打包,在重写方法后才会有影响 + 是否成功的结果对象 +
+ + + + + + + + + + + + + + + + + + + + + Udp报文协议的内容传送 + + + + + 实例化一个默认的对象 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 基于webapi的数据访问的基类,提供了基本的http接口的交互功能
+ A base class for data access based on webapi that provides basic HTTP interface interaction +
+ + 当前的基类在.net framework2.0上存在问题,在.net framework4.5及.net standard上运行稳定而且正常 + +
+ + + 使用指定的ip地址来初始化对象
+ Initializes the object using the specified IP address +
+ Ip地址信息 +
+ + + 使用指定的ip地址及端口号来初始化对象
+ Initializes the object with the specified IP address and port number +
+ Ip地址信息 + 端口号信息 +
+ + + 使用指定的ip地址,端口号,用户名,密码来初始化对象
+ Initialize the object with the specified IP address, port number, username, and password +
+ Ip地址信息 + 端口号信息 + 用户名 + 密码 +
+ + + 针对请求的头信息进行额外的处理 + + 头信息 + + + + 使用GET操作从网络中获取到数据信息 + + 除去ip地址和端口的地址 + 返回的数据内容 + + + + 使用POST命令去提交数据内容,然后返回相关的数据信息 + + 已经去除ip地址,端口号的api信息 + 数据内容 + 从服务器返回的内容 + + + + + + + + + + 获取或设置远程服务器的IP地址
+ Gets or sets the IP address of the remote server +
+
+ + + 获取或设置远程服务器的端口号信息
+ Gets or sets the port number information for the remote server +
+
+ + + 获取或设置当前的用户名
+ Get or set the current username +
+
+ + + 获取或设置当前的密码
+ Get or set the current password +
+
+ + + + + + 是否启用Https的协议访问,对于Https来说,端口号默认为 443
+ Whether to enable Https protocol access, for Https, the port number defaults to 443 +
+
+ + + 默认的内容类型,如果为空,则不进行设置操作。例如设置为 "text/plain", "application/json", "text/html" 等等。
+ The default content type, if it is empty, no setting operation will be performed. For example, set to "text/plain", "application/json", "text/html" and so on. +
+
+ + + 获取或设置是否使用ISO的编码信息,默认为 False
+ Get or set whether to use ISO encoding information, the default is False +
+ + 在访问某些特殊的API的时候,会发生异常"The character set provided in ContentType is invalid....",这时候,只需要将本属性设置为 True 即可。 + +
+ + + 获取当前的HttpClinet的客户端
+ Get the current HttpClinet client +
+
+ + + + + + 一个基于WebApi协议的设备类对象 + + + + + 实例化一个默认的对象,使用127.0.0.1和端口80 + + + + + 指定ip地址和端口号来实例化一个对象 + + ip地址 + 端口号 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 机器人的基于webapi接口的基础类信息 + + + + + + + + + + + + + + 等待重写的额外的指令信息的支持。除了url的形式之外,还支持基于命令的数据交互
+ Additional instruction information waiting for rewriting is supported.In addition to the url format, command based data interaction is supported +
+ 地址信息 + 是否读取成功的内容 +
+ + + + + + 读取对方信息的的数据信息,通常是针对GET的方法信息设计的。如果使用了url=开头,就表示是使用了原生的地址访问
+ Read the other side of the data information, usually designed for the GET method information.If you start with url=, you are using native address access +
+ 无效参数 + 带有成功标识的byte[]数组 +
+ + + 读取对方信息的的字符串数据信息,通常是针对GET的方法信息设计的。如果使用了url=开头,就表示是使用了原生的地址访问
+ The string data information that reads the other party information, usually designed for the GET method information.If you start with url=, you are using native address access +
+ 地址信息 + 带有成功标识的字符串数据 +
+ + + 使用POST的方式来向对方进行请求数据信息,需要使用url=开头,来表示是使用了原生的地址访问
+ Using POST to request data information from the other party, we need to start with url= to indicate that we are using native address access +
+ 指定的地址信息,有些设备可能不支持 + 原始的字节数据信息 + 是否成功的写入 +
+ + + 使用POST的方式来向对方进行请求数据信息,需要使用url=开头,来表示是使用了原生的地址访问
+ Using POST to request data information from the other party, we need to start with url= to indicate that we are using native address access +
+ 指定的地址信息 + 字符串的数据信息 + 是否成功的写入 +
+ + + + + + + + + + + + + + + + + + 包含了主动异步接收的方法实现和文件类异步读写的实现
+ Contains the implementation of the active asynchronous receiving method and the implementation of asynchronous reading and writing of the file class +
+
+ + + 默认的无参构造方法
+ The default parameterless constructor +
+
+ + + [自校验] 将文件数据发送至套接字,如果结果异常,则结束通讯
+ [Self-check] Send the file data to the socket. If the result is abnormal, the communication is ended. +
+ 网络套接字 + 完整的文件路径 + 文件的长度 + 进度报告器 + 是否发送成功 +
+ + + [自校验] 将文件数据发送至套接字,具体发送细节将在继承类中实现,如果结果异常,则结束通讯
+ [Self-checking] Send the file data to the socket. The specific sending details will be implemented in the inherited class. If the result is abnormal, the communication will end +
+ 套接字 + 文件名称,文件必须存在 + 远程端的文件名称 + 文件的额外标签 + 文件的上传人 + 发送进度报告 + 是否发送成功 +
+ + + [自校验] 将流数据发送至套接字,具体发送细节将在继承类中实现,如果结果异常,则结束通讯
+ [Self-checking] Send stream data to the socket. The specific sending details will be implemented in the inherited class. + If the result is abnormal, the communication will be terminated +
+ 套接字 + 文件名称,文件必须存在 + 远程端的文件名称 + 文件的额外标签 + 文件的上传人 + 发送进度报告 + 是否成功的结果对象 +
+ + + [自校验] 从套接字中接收文件头信息
+ [Self-checking] Receive file header information from socket +
+ 套接字的网络 + 包含文件信息的结果对象 +
+ + + [自校验] 从网络中接收一个文件,如果结果异常,则结束通讯
+ [Self-checking] Receive a file from the network. If the result is abnormal, the communication ends. +
+ 网络套接字 + 接收文件后保存的文件名 + 接收进度报告 + 包含文件信息的结果对象 +
+ + + [自校验] 从网络中接收一个文件,写入数据流,如果结果异常,则结束通讯,参数顺序文件名,文件大小,文件标识,上传人
+ [Self-checking] Receive a file from the network. If the result is abnormal, the communication ends. +
+ 网络套接字 + 等待写入的数据流 + 接收进度报告 + 文件头结果 +
+ + + + + + + + + + + + + + + + + + + + + 对客户端而言是的通讯用的套接字,对服务器来说是用于侦听的套接字
+ A communication socket for the client, or a listening socket for the server +
+
+ + + + + + 读写网络的辅助类 + + + + + 写入位到字寄存器的功能,该功能先读取字寄存器的字数据,然后修改其中的位,再写入回去,可能存在脏数据的风险
+ The function of writing bit-to-word registers, which first reads the word data of the word register, then modifies the bits in it, and then writes back, which may be the risk of dirty data +
+ + 关于脏数据风险:从读取数据,修改位,再次写入数据时,大概需要经过3ms~10ms不等的时间,如果此期间内PLC修改了该字寄存器的其他位,再次写入数据时会恢复该点位的数据到读取时的初始值,可能引发设备故障,请谨慎开启此功能。 + + 通信对象信息 + 写入的地址信息,需要携带.号 + 写入的值信息 + 多少长度的bit位组成一个字地址信息 + 是否写入成功 +
+ + + + + + 通信对象 + + + + 通信对象 + + + + 通信对象 + + + + 通信对象 + + + + 通信对象 + + + + 通信对象 + + + + 通信对象 + + + + + + + + + + + + + + + + + + + + + + + + + + + + 通信对象 + + + + 通信对象 + + + + 通信对象 + + + + 通信对象 + + + + 通信对象 + + + + 通信对象 + + + + 通信对象 + + + + 异形客户端的连接对象 + + + + + 实例化一个默认的参数 + + + + + 网络套接字 + + + + + 唯一的标识 + + + + + 密码信息 + + + + + 指示当前的网络状态 + + + + + 上线时间 + + + + + 最后一次下线的时间 + + + + + 进行下线操作 + + + + + + + + 当前的网络会话信息,还包含了一些客户端相关的基本的参数信息
+ The current network session information also contains some basic parameter information related to the client +
+
+ + + + + + + + + 远程对象的别名信息
+ Alias information for remote objects +
+
+ + + 客户端唯一的标识,在NetPushServer及客户端类里有使用
+ The unique identifier of the client, used in the NetPushServer and client classes +
+
+ + + UDP通信中的远程端
+ Remote side in UDP communication +
+
+ + + 数据内容缓存
+ data content cache +
+
+ + + 用于关键字分类使用
+ Used for keyword classification +
+
+ + + 当前会话绑定的自定义的对象内容
+ The content of the custom object bound to the current session +
+
+ + + + + + + + + + + + 传输数据的对象 + + + + + 发送的数据内容 + + + + + 已经发送长度 + + + + + 关键字 + + + + + 客户端的标识 + + + + + 文件传送的异步对象 + + + + + 操作的流 + + + + + 会话的基类信息 + + + + + 实例化一个默认的对象 + + + + + 通过指定的对象来初始化一个会话内容 + + 连接的Socket对象 + + + + 实际传输数据的对象,除非你清楚自己在收发什么数据信息,否则尽量不直接使用本对象
+ The actual data transmission object, unless you know what data information you are sending and receiving, try not to directly use this object +
+
+ + + 获取当前的客户端的上线时间
+ Get the online time of the current client +
+
+ + + 获取当前的远程连接对象的IP地址
+ Get the IP address of the current remote connection object +
+
+ + + 获取当前的连接对象连接的远程客户端
+ Get the remote client connected by the current connection object +
+
+ + + 获取心跳验证的时间点
+ Get the time point of heartbeat verification +
+
+ + + 更新当前的心跳时间
+ Update the current heartbeat time +
+
+ + + 更新当前的连接对象信息 + + 连接的对象 + + + + 网络中的异步对象 + + + + + 实例化一个对象 + + + + + 实例化一个对象,指定接收或是发送的数据长度 + + 数据长度 + + + + 唯一的一串信息 + + + + + 网络套接字 + + + + + 是否关闭了通道 + + + + + 清空旧的数据 + + + + + 携带TaskCompletionSource属性的异步对象 + + 类型 + + + + 实例化一个对象 + + + + + 实例化一个对象,指定接收或是发送的数据长度 + + 数据长度 + + + + 异步消息的对象 + + + + + 本次接收或是发送的数据长度 + + + + + 已经处理的字节长度 + + + + + 操作完成的信号 + + + + + 缓存器 + + + + + 是否发生了错误 + + + + + 错误消息 + + + + + 静态的方法支持类,提供一些网络的静态支持,支持从套接字从同步接收指定长度的字节数据,并支持报告进度。
+ The static method support class provides some static support for the network, supports receiving byte data of a specified length from the socket from synchronization, and supports reporting progress. +
+ + 在接收指定数量的字节数据的时候,如果一直接收不到,就会发生假死的状态。接收的数据时保存在内存里的,不适合大数据块的接收。 + +
+ + + Socket传输中的缓冲池大小
+ Buffer pool size in socket transmission +
+
+ + + 根据接收数据的长度信息,合理的分割出单次的长度信息 + + 要接收数据的总长度信息 + 本次接收数据的长度 + + + + 从socket的网络中读取数据内容,需要指定数据长度和超时的时间,为了防止数据太大导致接收失败,所以此处接收到新的数据之后就更新时间。
+ To read the data content from the socket network, you need to specify the data length and timeout period. In order to prevent the data from being too large and cause the reception to fail, the time is updated after new data is received here. +
+ 网络套接字 + 接收的长度 + 当前接收数据的进度报告,有些协议支持传输非常大的数据内容,可以给与进度提示的功能 + 最终接收的指定长度的byte[]数据 +
+ + + 从socket的网络中读取数据内容,需要指定数据长度和超时的时间,为了防止数据太大导致接收失败,所以此处接收到新的数据之后就更新时间。
+ To read the data content from the socket network, you need to specify the data length and timeout period. In order to prevent the data from being too large and cause the reception to fail, the time is updated after new data is received here. +
+ 网络套接字 + 缓存的字节数组 + 偏移信息 + 接收长度 + 当前接收数据的进度报告,有些协议支持传输非常大的数据内容,可以给与进度提示的功能 + 远程关闭的异常信息 +
+ + + 从socket的网络中读取数据内容,然后写入到流中 + + 网络套接字 + 等待写入的流 + 长度信息 + 当前接收数据的进度报告,有些协议支持传输非常大的数据内容,可以给与进度提示的功能 + 远程关闭的异常信息 + + + + 创建一个新的socket对象并连接到远程的地址,需要指定远程终结点,超时时间(单位是毫秒),如果需要绑定本地的IP或是端口,传入 local对象
+ To create a new socket object and connect to the remote address, you need to specify the remote endpoint, + the timeout period (in milliseconds), if you need to bind the local IP or port, pass in the local object +
+ 连接的目标终结点 + 连接的超时时间 + 如果需要绑定本地的IP地址,就需要设置当前的对象 + 返回套接字的封装结果对象 + + + +
+ + + + + + + + + + + + 管道的基础类对象 + + + + + 实例化一个默认的对象 + + + + + + + + + + + + + + + + + 串口的管道类对象,可以在不同的串口类中使用一个串口的通道信息
+ The pipe class object of the serial port can use the channel information of a serial port in different serial port classes +
+
+ + + 实例化一个默认的对象 + + + + + 初始化串口信息,波特率,数据位,停止位,奇偶校验需要全部自己来指定
+ Start serial port information, baud rate, data bit, stop bit, parity all need to be specified +
+ 端口号信息,例如"COM3" + 波特率 + 数据位 + 停止位 + 奇偶校验 +
+ + + 根据自定义初始化方法进行初始化串口信息
+ Initialize the serial port information according to the custom initialization method +
+ 初始化的委托方法 +
+ + + 打开一个新的串行端口连接
+ Open a new serial port connection +
+
+ + + 获取一个值,指示串口是否处于打开状态
+ Gets a value indicating whether the serial port is open +
+ 是或否 +
+ + + 关闭当前的串口连接
+ Close the current serial connection +
+
+ + + 获取或设置一个值,该值指示在串行通信中是否启用请求发送 (RTS) 信号。
+ Gets or sets a value indicating whether the request sending (RTS) signal is enabled in serial communication. +
+
+ + + + + + 获取当前的串口对象信息
+ Get current serial port object information +
+ 串口对象 +
+ + + + + + 基于网络通信的管道信息,可以设置额外的一些参数信息,例如连接超时时间,读取超时时间等等。
+ Based on the pipe information of network communication, some additional parameter information can be set, such as connection timeout time, read timeout time and so on. +
+
+ + + 实例化一个默认的对象
+ Instantiate a default object +
+
+ + + 通过指定的IP地址和端口号来实例化一个对象
+ Instantiate an object with the specified IP address and port number +
+ IP地址信息 + 端口号 +
+ + + 获取当前的连接状态是否发生了异常,如果发生了异常,返回 False
+ Gets whether an exception has occurred in the current connection state, and returns False if an exception has occurred +
+ 如果有异常,返回 True, 否则返回 False +
+ + + + + + + + + + + + 指示长连接的套接字是否处于错误的状态
+ Indicates if the long-connected socket is in the wrong state +
+
+ + + 获取或设置当前的客户端用于服务器连接的套接字。
+ Gets or sets the socket currently used by the client for server connection. +
+
+ + + + + + + + + + + + + + + 设置多个可选的端口号信息,例如在三菱的PLC里,支持配置多个端口号,当一个网络发生异常时,立即切换端口号连接读写,提升系统的稳定性
+ Set multiple optional port number information. For example, in Mitsubishi PLC, it supports to configure multiple port numbers. + When an abnormality occurs in a network, the port number is immediately switched to connect to read and write to improve the stability of the system. +
+ 端口号数组信息 +
+ + + 获取当前的远程连接信息,如果端口号设置了可选的数组,那么每次获取对象就会发生端口号切换的操作。
+ Get the current remote connection information. If the port number is set to an optional array, the port number switching operation will occur every time the object is obtained. +
+ 远程连接的对象 +
+ + + 变更当前的端口号信息,如果设置了多个端口号的话,就切换其他可用的端口
+ Change the current port number information, and if multiple port numbers are set, switch to other available ports +
+
+ + + + + + 实例化一个AES加密解密的对象,默认 模式的对象 + + + + + 使用指定的密钥实例化一个AES加密解密的对象,密钥由32位数字或字母组成,例如 12345678123456781234567812345678 + + 密钥 + 加密的模式,默认为 + + + + + + + + + + + + + + + + + + + DES加密解密的对象 + + + + + 使用指定的密钥来实例化一个加密对象,该密钥右8位的字符和数字组成,例如 12345678 + + 密钥 + + + + + + + + + + + + + + + + + + + 基于RSA加密模型的证书,支持自定义的颁发证书,以及校验证书合法性
+ Certificates based on RSA encryption model support custom issuance certificates and verify certificate legitimacy +
+ + 证书可以用于接口的权限认证,不需要修改接口源代码或是配置文件,颁发证书就可以修改用户的权限,而且只要保密好私钥,那么证书本身就无法伪造,具有极高的安全性,具体用法参考示例代码。
+ The certificate can be used for the permission authentication of the interface, no need to modify the interface source code or configuration file, + the issuance of the certificate can modify the user's permissions, and as long as the private key is kept secret, then the certificate itself cannot be forged, + with extremely high security, the specific usage refer to the sample code. +
+ + 证书这部分的功能主要分为,制作证书,以及校验证书,至于为什么不使用证书的形式, + 因为这种证书都是要授信机构颁发的,自己颁发的证书验签不了,所以在本库里提供一个用于自己颁发,自己验签的证书。
+ 假设我们有一些API接口需要使用证书来控制权限,有调用时间检验的,或是按接口名称校验的,或是按调用次数来校验的,接口见下面的代码。 + + 当然我们还可以自己颁发证书,注意,这时候的私钥就非常有用了,私钥丢了,就发不了证书了。如果要重新生成公私钥,那么之前发出去的证书都失效了。 + +
+
+ + + 实例化一个默认的对象
+ Instantiate a default object +
+
+ + + 使用指定的公钥,私钥来实例化一个的对象
+ An object is instantiated using the specified public key and private key +
+ 公钥的对象 + 私钥的对象 +
+ + + 使用指定的公钥,私钥来实例化一个的对象
+ An object is instantiated using the specified public key and private key +
+ 公钥的二进制数据 + 私钥的二进制数据 +
+ + + 从文件的二进制数据中加载相关的参数 + + 证书信息 + + + + 证书的颁发者 + + + + + 证书的持有者 + + + + + 证书有效的起始时间 + + + + + 证书有效的截止时间 + + + + + 证书的公钥信息 + + + + + 发证日期 + + + + + 获取或设置当前证书的关键字,可以用来给证书做分类 + + + + + 获取或设置当前证书的唯一编号信息 + + + + + 有效小时数,小于等于0 表示无期限 + + + + + 证书的其他描述信息 + + + + + 获取当前证书的原始字节信息,可以存储到文件中,必须提供私钥信息,否则无法进行签名的操作
+ Gets the raw byte information of the current certificate, which can be stored in a file, and the private key information must be provided, otherwise the signing operation cannot be performed +
+ 原始字节数据 +
+ + + 使用给定的公钥,校验当前的证书是否合法的,如果公钥为 null,则直接校验证书本身是否合法。
+ Use the given public key to verify whether the current certificate is valid, and if the public key is null, directly verify whether the certificate itself is valid. +
+ 公钥信息,如果不为空,则校验公钥是否一致 + 证书信息 + 是否合法 +
+ + + 从证书的原始字节创建一个对象,方便浏览证书的基本信息。
+ Create a object from the original bytes of the certificate to facilitate browsing the basic information of the certificate. +
+ 证书信息 + 公钥对象 + 私钥对象 + 证书的可描述对象 +
+ + + 加密解密的数据接口
+ Encrypted and decrypted data interface +
+
+ + + 对原始的数据进行加密的操作,返回加密之后的二进制原始数据
+ Encrypt the original data and return the encrypted binary original data +
+ 等待加密的数据 + 加密之后的二进制数据 +
+ + + 对原始的数据进行解密的操作,返回解密之后的二进制原始数据
+ Decrypt the original data and return the decrypted binary original data +
+ 等待解密的数据 + 解密之后的原始二进制数据 +
+ + + 针对字符串进行加密,并返回加密后的字符串数据,字符串的编码默认为UTF8,加密后返回Base64编码
+ Encrypt the string and return the encrypted string data. The encoding of the string is UTF8 by default. After encryption, the Base64 encoding is returned. +
+ 等待加密的字符串 + 加密后的Base64编码 +
+ + + 针对Base64字符串进行解密操作,转为二进制数据后进行解密,解密之后使用UTF8编码获取最终的字符串数据
+ Decrypt the Base64 string, convert it to binary data, and decrypt it. After decryption, use UTF8 encoding to obtain the final string data. +
+ base64编码的字符串数据 + 最终的解析完成的字符串 +
+ + + 当前加密的密钥信息
+ currently encrypted key information +
+
+ + + RSA加密解密算法的辅助方法,可以用PEM格式的密钥创建公钥,或是私钥对象,然后用来加解密操作。 + + + + + 使用 PEM 格式基于base64编码的私钥来创建一个 RSA 算法加密解密的对象,可以直接用于加密解密操作
+ Use the PEM format based on the base64-encoded private key to create an RSA algorithm encryption and decryption object, + which can be directly used for encryption and decryption operations +
+ 私钥 + RSA 算法的加密解密对象 +
+ + + 使用原始的私钥数据(PEM格式)来创建一个 RSA 算法加密解密的对象,可以直接用于加密解密操作
+ Use the original private key data (PEM format) to create an RSA algorithm encryption and decryption object, + which can be directly used for encryption and decryption operations +
+ 原始的私钥数据 + RSA 算法的加密解密对象 +
+ + + 从RSA的算法对象里,获取到PEM格式的原始私钥数据,如果需要存储,或是显示,只需要 Convert.ToBase64String 方法
+ Obtain the original private key data in PEM format from the RSA algorithm object. If you need to store or display it, + you only need the Convert.ToBase64String method +
+ RSA 算法的加密解密对象 + 原始的私钥数据 +
+ + + 从RSA的算法对象里,获取到PEM格式的原始公钥数据,如果需要存储,或是显示,只需要 Convert.ToBase64String 方法
+ Obtain the original public key data in PEM format from the RSA algorithm object. If you need to store or display it, + you only need the Convert.ToBase64String method +
+ RSA 算法的加密解密对象 + 原始的公钥数据 +
+ + + PEM 格式基于base64编码的公钥来创建一个 RSA 算法加密解密的对象,可以直接用于加密或是验证签名操作
+ Use the original public key data (PEM format) to create an RSA algorithm encryption and decryption object, + which can be directly used for encryption or signature verification +
+ 公钥 + RSA 算法的加密解密对象 +
+ + + 对原始字节的数据进行加密,不限制长度,因为RSA本身限制了117字节,所以此处进行数据切割加密。
+ Encrypt the original byte data without limiting the length, because RSA itself limits 117 bytes, so the data is cut and encrypted here. +
+ RSA公钥对象 + 等待加密的原始数据 + 加密之后的结果信息 +
+ + + 对超过117字节限制的加密数据进行解密,解密出原始的字节数据,因为RSA本身限制了117字节,所以此处进行数据切割解密。
+ Decrypt the encrypted data that exceeds the 117-byte limit and decrypt the original byte data, because RSA itself limits 117 bytes, so the data is cut and decrypted here. +
+ RSA私钥对象 + 等待解密的数据 + 解密之后的结果数据 +
+ + + 使用原始的公钥数据(PEM格式)来创建一个 RSA 算法加密解密的对象,可以直接用于加密或是验证签名操作
+ Use the original public key data (PEM format) to create an RSA algorithm encryption and decryption object, + which can be directly used for encryption or signature verification +
+ 公钥 + RSA 算法的加密解密对象 +
+ + + 线程的协调逻辑状态 + + + + + 所有项完成 + + + + + 超时 + + + + + 任务取消 + + + + + 一个线程协调逻辑类,详细参考书籍《CLR Via C#》page:681 + 这个类可惜没有报告进度的功能 + + + + + 每次的操作任务开始前必须调用该方法 + + + + + + 在一次任务处理好操作之后,必须调用该方法 + + + + + 该方法必须在发起所有的操作之后调用 + + 回调方法 + 超时时间 + + + + 超时的方法 + + + + + + 取消任务的执行 + + + + + 生成一次报告 + + 报告的状态 + + + + 乐观的并发方法模型,具体参照《CLR Via C#》page:686 + + 唯一的目标数据 + 修改数据的算法 + + + + + 一个用于高性能,乐观并发模型控制操作的类,允许一个方法(隔离方法)的安全单次执行 + + + + + 实例化一个对象,需要传入隔离执行的方法 + + 隔离执行的方法 + + + + 启动线程池执行隔离方法 + + + + + + + + 一个高性能的读写锁,支持写锁定,读灵活,读时写锁定,写时读锁定 + + + + + 返回本对象的描述字符串 + + 对象的描述字符串 + + + + 实例化一个读写锁的对象 + + + + + 释放资源 + + + + + 根据读写情况请求锁 + + True为写请求,False为读请求 + + + + 释放锁,将根据锁状态自动区分读写锁 + + + + + 一个简单的混合线程同步锁,采用了基元用户加基元内核同步构造实现
+ A simple hybrid thread editing lock, implemented by the base user plus the element kernel synchronization. +
+ + 当前的锁适用于,竞争频率比较低,锁部分的代码运行时间比较久的情况,当前的简单混合锁可以达到最大性能。 + + + 以下演示常用的锁的使用方式,还包含了如何优雅的处理异常锁 + + +
+ + + + + + 基元用户模式构造同步锁 + + + + + 基元内核模式构造同步锁 + + + + + 获取锁,可以指定获取锁的超时时间,如果指定的时间没有获取锁,则返回False,反之,返回True
+ To acquire a lock, you can specify the timeout period for acquiring a lock, return False if the specified time does not acquire a lock, and vice versa, return True +
+ 是否正确的获得锁 +
+ + + 离开锁
+ Leave the lock +
+ 如果该操作成功,返回True,反之,返回False +
+ + + 获取当前锁是否在等待当中
+ Gets whether the current lock is waiting +
+
+ + + 获取当前进入等待锁的数量
+ Gets the number of pending locks currently entered +
+
+ + + 获取当前HslCommunication组件里正总的所有进入锁的信息
+ Gets the information about all incoming locks in the current HslCommunication component +
+
+ + + 当前HslCommunication组件里正在等待的锁的统计信息,此时已经发生了竞争了
+ Statistics on locks currently waiting in the HslCommunication component are now in contention +
+
+ + + 一个用于多线程并发处理数据的模型类,适用于处理数据量非常庞大的情况 + + 等待处理的数据类型 + + + + 实例化一个数据处理对象 + + 数据处理列表 + 数据操作方法,应该是相对耗时的任务 + 需要使用的线程数 + + + + 操作总数,判定操作是否完成 + + + + + 判断是否所有的线程是否处理完成 + + + + + 准备启动的处理数据的线程数量 + + + + + 指示多线程处理是否在运行中,防止冗余调用 + + + + + 列表数据 + + + + + 需要操作的方法 + + + + + 一个双参数委托 + + + + + + + 用于报告进度的委托,当finish等于count时,任务完成 + + 已完成操作数量 + 总数量 + 成功数量 + 失败数量 + + + + 异常发生时事件 + + + + + 报告处理进度时发生 + + + + + 已处理完成数量,无论是否异常 + + + + + 处理完成并实现操作数量 + + + + + 处理过程中异常数量 + + + + + 用于触发事件的混合线程锁 + + + + + 指示处理状态是否为暂停状态 + + + + + 指示系统是否需要强制退出 + + + + + 在发生错误的时候是否强制退出后续的操作 + + + + + 启动多线程进行数据处理 + + + + + 暂停当前的操作 + + + + + 恢复暂停的操作 + + + + + 直接手动强制结束操作 + + + + + 在发生错误的时候是否强制退出后续的操作 + + + + + 一个双检锁的示例,适合一些占内存的静态数据对象,获取的时候才实例化真正的对象 + + + + + 一个高级的混合线程同步锁,采用了基元用户加基元内核同步构造实现,并包含了自旋和线程所有权 + + + 当竞争的频率很高的时候,锁的时间很短的时候,当前的锁可以获得最大性能。 + + + + + 释放资源 + + + + + 自旋锁的自旋周期,当竞争频率小,就要设置小,当竞争频率大,就要设置大,锁时间长就设置小,锁时间短就设置大,这样才能达到真正的高性能,默认为1000 + + + + + 获取锁 + + + + + 离开锁 + + + + + 数据转换类的基础,提供了一些基础的方法实现,默认 的顺序,和C#的字节顺序是一致的。
+ The basis of the data conversion class provides some basic method implementations. + The default order of is consistent with the byte order of C#. +
+
+ + + 实例化一个默认的对象
+ Instantiate a default object +
+
+ + + 使用指定的数据解析来实例化对象
+ Instantiate the object using the specified data parsing +
+ 数据规则 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 反转多字节的数据信息 + + 数据字节 + 起始索引,默认值为0 + 实际字节信息 + + + + 反转多字节的数据信息 + + 数据字节 + 起始索引,默认值为0 + 实际字节信息 + + + + + + + + + + + + + + + + 所有数据转换类的静态辅助方法
+ Static helper method for all data conversion classes +
+
+ + + 结果转换操作的基础方法,需要支持类型,及转换的委托,并捕获转换时的异常方法 + + 结果类型 + 源 + 实际转换的委托 + 转换结果 + + + + 结果转换操作的基础方法,需要支持类型,及转换的委托 + + 结果类型 + 源结果 + 转换结果 + + + + 使用指定的转换方法,来获取到实际的结果对象内容,所转换的规则 + + 结果类型 + 输入类型 + 原始的结果对象 + 转换方法,从类型TIn转换拿到TResult的泛型委托 + 类型为TResult的对象 + + + + 使用指定的转换方法,来获取到实际的结果对象内容 + + 输入类型 + 原始的结果对象 + 转换方法,从类型TIn转换拿到OperateResult的TResult的泛型委托 + 类型为TResult的对象 + + + + 使用指定的转换方法,来获取到实际的结果对象内容 + + 结果类型 + 输入类型 + 原始的结果对象 + 转换方法,从类型TIn转换拿到OperateResult的TResult的泛型委托 + 类型为TResult的对象 + + + + 使用指定的转换方法,来获取到实际的结果对象内容 + + 结果类型 + 输入类型1 + 输入类型2 + 原始的结果对象 + 转换方法1,从类型TIn1转换拿到OperateResult的TIn2的泛型委托 + 转换方法2,从类型TIn2转换拿到OperateResult的TResult的泛型委托 + 类型为TResult的对象 + + + + 使用指定的转换方法,来获取到实际的结果对象内容 + + 结果类型 + 输入类型1 + 输入类型2 + 输入类型3 + 原始的结果对象 + 转换方法1,从类型TIn1转换拿到OperateResult的TIn2的泛型委托 + 转换方法2,从类型TIn2转换拿到OperateResult的TIn3的泛型委托 + 转换方法3,从类型TIn3转换拿到OperateResult的TResult的泛型委托 + 类型为TResult的对象 + + + + 使用指定的转换方法,来获取到实际的结果对象内容 + + 结果类型 + 输入类型1 + 输入类型2 + 输入类型3 + 输入类型4 + 原始的结果对象 + 转换方法1,从类型TIn1转换拿到OperateResult的TIn2的泛型委托 + 转换方法2,从类型TIn2转换拿到OperateResult的TIn3的泛型委托 + 转换方法3,从类型TIn3转换拿到OperateResult的TIn4的泛型委托 + 转换方法4,从类型TIn4转换拿到OperateResult的TResult的泛型委托 + 类型为TResult的对象 + + + + 使用指定的转换方法,来获取到实际的结果对象内容 + + 结果类型 + 输入类型1 + 输入类型2 + 输入类型3 + 输入类型4 + 输入类型5 + 原始的结果对象 + 转换方法1,从类型TIn1转换拿到OperateResult的TIn2的泛型委托 + 转换方法2,从类型TIn2转换拿到OperateResult的TIn3的泛型委托 + 转换方法3,从类型TIn3转换拿到OperateResult的TIn4的泛型委托 + 转换方法4,从类型TIn4转换拿到OperateResult的TIn5的泛型委托 + 转换方法5,从类型TIn5转换拿到OperateResult的TResult的泛型委托 + 类型为TResult的对象 + + + + 使用指定的转换方法,来获取到实际的结果对象内容 + + 结果类型 + 输入类型1 + 输入类型2 + 输入类型3 + 输入类型4 + 输入类型5 + 输入类型6 + 原始的结果对象 + 转换方法1,从类型TIn1转换拿到OperateResult的TIn2的泛型委托 + 转换方法2,从类型TIn2转换拿到OperateResult的TIn3的泛型委托 + 转换方法3,从类型TIn3转换拿到OperateResult的TIn4的泛型委托 + 转换方法4,从类型TIn4转换拿到OperateResult的TIn5的泛型委托 + 转换方法5,从类型TIn5转换拿到OperateResult的TIn6的泛型委托 + 转换方法6,从类型TIn6转换拿到OperateResult的TResult的泛型委托 + 类型为TResult的对象 + + + + 使用指定的转换方法,来获取到实际的结果对象内容 + + 结果类型 + 输入类型1 + 输入类型2 + 输入类型3 + 输入类型4 + 输入类型5 + 输入类型6 + 输入类型7 + 原始的结果对象 + 转换方法1,从类型TIn1转换拿到OperateResult的TIn2的泛型委托 + 转换方法2,从类型TIn2转换拿到OperateResult的TIn3的泛型委托 + 转换方法3,从类型TIn3转换拿到OperateResult的TIn4的泛型委托 + 转换方法4,从类型TIn4转换拿到OperateResult的TIn5的泛型委托 + 转换方法5,从类型TIn5转换拿到OperateResult的TIn6的泛型委托 + 转换方法6,从类型TIn6转换拿到OperateResult的TIn7的泛型委托 + 转换方法7,从类型TIn7转换拿到OperateResult的TResult的泛型委托 + 类型为TResult的对象 + + + + 使用指定的转换方法,来获取到实际的结果对象内容 + + 结果类型 + 输入类型1 + 输入类型2 + 输入类型3 + 输入类型4 + 输入类型5 + 输入类型6 + 输入类型7 + 输入类型8 + 原始的结果对象 + 转换方法1,从类型TIn1转换拿到OperateResult的TIn2的泛型委托 + 转换方法2,从类型TIn2转换拿到OperateResult的TIn3的泛型委托 + 转换方法3,从类型TIn3转换拿到OperateResult的TIn4的泛型委托 + 转换方法4,从类型TIn4转换拿到OperateResult的TIn5的泛型委托 + 转换方法5,从类型TIn5转换拿到OperateResult的TIn6的泛型委托 + 转换方法6,从类型TIn6转换拿到OperateResult的TIn7的泛型委托 + 转换方法7,从类型TIn7转换拿到OperateResult的TIn8的泛型委托 + 转换方法8,从类型TIn8转换拿到OperateResult的TResult的泛型委托 + 类型为TResult的对象 + + + + 使用指定的转换方法,来获取到实际的结果对象内容 + + 结果类型 + 输入类型1 + 输入类型2 + 输入类型3 + 输入类型4 + 输入类型5 + 输入类型6 + 输入类型7 + 输入类型8 + 输入类型9 + 原始的结果对象 + 转换方法1,从类型TIn1转换拿到OperateResult的TIn2的泛型委托 + 转换方法2,从类型TIn2转换拿到OperateResult的TIn3的泛型委托 + 转换方法3,从类型TIn3转换拿到OperateResult的TIn4的泛型委托 + 转换方法4,从类型TIn4转换拿到OperateResult的TIn5的泛型委托 + 转换方法5,从类型TIn5转换拿到OperateResult的TIn6的泛型委托 + 转换方法6,从类型TIn6转换拿到OperateResult的TIn7的泛型委托 + 转换方法7,从类型TIn7转换拿到OperateResult的TIn8的泛型委托 + 转换方法8,从类型TIn8转换拿到OperateResult的TIn9的泛型委托 + 转换方法9,从类型TIn9转换拿到OperateResult的TResult的泛型委托 + 类型为TResult的对象 + + + + 使用指定的转换方法,来获取到实际的结果对象内容 + + 结果类型 + 输入类型1 + 输入类型2 + 输入类型3 + 输入类型4 + 输入类型5 + 输入类型6 + 输入类型7 + 输入类型8 + 输入类型9 + 输入类型10 + 原始的结果对象 + 转换方法1,从类型TIn1转换拿到OperateResult的TIn2的泛型委托 + 转换方法2,从类型TIn2转换拿到OperateResult的TIn3的泛型委托 + 转换方法3,从类型TIn3转换拿到OperateResult的TIn4的泛型委托 + 转换方法4,从类型TIn4转换拿到OperateResult的TIn5的泛型委托 + 转换方法5,从类型TIn5转换拿到OperateResult的TIn6的泛型委托 + 转换方法6,从类型TIn6转换拿到OperateResult的TIn7的泛型委托 + 转换方法7,从类型TIn7转换拿到OperateResult的TIn8的泛型委托 + 转换方法8,从类型TIn8转换拿到OperateResult的TIn9的泛型委托 + 转换方法9,从类型TIn9转换拿到OperateResult的TIn10的泛型委托 + 转换方法10,从类型TIn10转换拿到OperateResult的TResult的泛型委托 + 类型为TResult的对象 + + + + 应用于多字节数据的解析或是生成格式
+ Parsing or generating format for multibyte data +
+
+ + + 按照顺序排序 + + + + + 按照单字反转 + + + + + 按照双字反转 + + + + + 按照倒序排序 + + + + + 支持转换器的基础接口,规定了实际的数据类型和字节数组进行相互转换的方法。主要为,,,,,, + ,,,,之间的变换关系
+ Support the basic interface of the converter, and stipulate the method of mutual conversion between actual data types and byte arrays. Mainly ,, + ,,,,,,,, + The transformation relationship between +
+ + 所有的设备通讯类都内置了该转换的模型,并且已经配置好数据的高地位模式,可以方便的转换信息,当然您也可以手动修改属性来满足更加特殊的场景
+ All device communication classes have a built-in conversion model, and the high-status mode of the data has been configured, + which can easily convert the information. Of course, you can also manually modify the attribute to meet more special requirements. +
+ + 事实上来说,在不同的PLC设备里,对数据类型的描述通常有所区别。比如说一般PLC所说的字数据,int数据,对于C#来说则是short,ushort。 + +
+ + + 从缓存中提取出bool结果,需要传入想要提取的位索引,注意:是从0开始的位索引,10则表示 buffer[1] 的第二位。
+ To extract the bool result from the cache, you need to pass in the bit index you want to extract. Note: the bit index starts from 0, and 10 represents the second bit of buffer[1]. +
+ 等待提取的缓存数据 + 位的索引,注意:是从0开始的位索引,10则表示 buffer[1] 的第二位。 + 表示不是 true 就是 false 的 bool 数据 +
+ + + 从缓存中提取出bool数组结果,需要传入想要提取的位索引,注意:是从0开始的位索引,10则表示 buffer[1] 的第二位。长度为 bool 数量的长度,传入 10 则获取 10 个长度的 bool[] 数组。
+ To extract the result of the bool array from the cache, you need to pass in the bit index you want to extract. Note: the bit index starts from 0, + and 10 represents the second bit of buffer[1]. The length is the length of the number of bools. If you pass in 10, you will get a bool[] array of 10 lengths. +
+ 缓存数据 + 位的起始索引,需要传入想要提取的位索引,注意:是从0开始的位索引,10则表示 buffer[1] 的第二位 + 读取的 bool 长度,按照位为单位,传入 10 则表示获取 10 个长度的 bool[] + bool数组 +
+ + + 从缓存中提取byte结果,需要指定起始的字节索引
+ To extract the byte result from the cache, you need to specify the starting byte index +
+ 缓存数据 + 索引位置 + byte对象 +
+ + + 从缓存中提取byte数组结果,需要指定起始的字节索引,以及指定读取的字节长度
+ To extract the byte array result from the cache, you need to specify the starting byte index and the byte length to be read +
+ 缓存数据 + 索引位置 + 读取的数组长度 + byte数组对象 +
+ + + 从缓存中提取short结果,需要指定起始的字节索引,按照字节为单位,一个short占用两个字节
+ To extract short results from the cache, you need to specify the starting byte index, in bytes, A short occupies two bytes +
+ 缓存数据 + 索引位置 + short对象 +
+ + + 从缓存中提取short数组结果,需要指定起始的字节索引,按照字节为单位,然后指定提取的 short 数组的长度,如果传入 10 ,则表示提取 10 个连续的 short 数据,该数据共占用 20 字节。
+ To extract the result of the short array from the cache, you need to specify the starting byte index, in bytes, + and then specify the length of the extracted short array. If 10 is passed in, it means to extract 10 consecutive short data. Occupies 20 bytes. +
+ 缓存数据 + 索引位置 + 读取的数组长度 + short数组对象 +
+ + + 从缓存中提取short二维数组结果,需要指定起始的字节索引,按照字节为单位,然后指定提取的 short 数组的行和列的长度,按照 short 为单位的个数。
+ To extract the result of a short two-dimensional array from the cache, you need to specify the starting byte index, in bytes, + and then specify the length of the rows and columns of the extracted short array, in terms of the number of shorts. +
+ 缓存数据 + 索引位置 + 二维数组行 + 二维数组列 + 二维short数组 +
+ + + 从缓存中提取ushort结果,需要指定起始的字节索引,按照字节为单位,一个ushort占用两个字节
+ To extract ushort results from the cache, you need to specify the starting byte index, in bytes, A ushort occupies two bytes +
+ 缓存数据 + 索引位置 + ushort对象 +
+ + + 从缓存中提取ushort数组结果,需要指定起始的字节索引,按照字节为单位,然后指定提取的 ushort 数组的长度,如果传入 10 ,则表示提取 10 个连续的 ushort 数据,该数据共占用 20 字节。
+ To extract the ushort array result from the cache, you need to specify the starting byte index, in bytes, + and then specify the length of the extracted ushort array. If 10 is passed in, it means to extract 10 consecutive ushort data. Occupies 20 bytes. +
+ 缓存数据 + 索引位置 + 读取的数组长度 + ushort数组对象 +
+ + + 从缓存中提取ushort二维数组结果,需要指定起始的字节索引,按照字节为单位,然后指定提取的 ushort 数组的行和列的长度,按照 ushort 为单位的个数。
+ To extract the result of the ushort two-dimensional array from the cache, you need to specify the starting byte index, in bytes, + and then specify the length of the rows and columns of the extracted ushort array, in terms of the number of ushorts. +
+ 缓存数据 + 索引位置 + 二维数组行 + 二维数组列 + 二维ushort数组 +
+ + + 从缓存中提取int结果,需要指定起始的字节索引,按照字节为单位,一个int占用四个字节
+ To extract the int result from the cache, you need to specify the starting byte index, in bytes, A int occupies four bytes +
+ 缓存数据 + 索引位置 + int对象 +
+ + + 从缓存中提取int数组结果,需要指定起始的字节索引,按照字节为单位,然后指定提取的 int 数组的长度,如果传入 10 ,则表示提取 10 个连续的 int 数据,该数据共占用 40 字节。
+ To extract the int array result from the cache, you need to specify the starting byte index, in bytes, + and then specify the length of the extracted int array. If 10 is passed in, it means to extract 10 consecutive int data. Occupies 40 bytes. +
+ 缓存数据 + 索引位置 + 读取的数组长度 + int数组对象 +
+ + + 从缓存中提取int二维数组结果,需要指定起始的字节索引,按照字节为单位,然后指定提取的 int 数组的行和列的长度,按照 int 为单位的个数。
+ To extract the result of an int two-dimensional array from the cache, you need to specify the starting byte index, + in bytes, and then specify the length of the rows and columns of the extracted int array, in the number of int units. +
+ 缓存数据 + 索引位置 + 二维数组行 + 二维数组列 + 二维int数组 +
+ + + 从缓存中提取uint结果,需要指定起始的字节索引,按照字节为单位,一个uint占用四个字节
+ To extract uint results from the cache, you need to specify the starting byte index, in bytes, A uint occupies four bytes +
+ 缓存数据 + 索引位置 + uint对象 +
+ + + 从缓存中提取uint数组结果,需要指定起始的字节索引,按照字节为单位,然后指定提取的 uint 数组的长度,如果传入 10 ,则表示提取 10 个连续的 uint 数据,该数据共占用 40 字节。
+ To extract the uint array result from the cache, you need to specify the starting byte index, in bytes, + and then specify the length of the extracted uint array. If 10 is passed in, it means to extract 10 consecutive uint data. Occupies 40 bytes. +
+ 缓存数据 + 索引位置 + 读取的数组长度 + uint数组对象 +
+ + + 从缓存中提取uint二维数组结果,需要指定起始的字节索引,按照字节为单位,然后指定提取的 uint 数组的行和列的长度,按照 uint 为单位的个数。
+ To extract the result of a uint two-dimensional array from the cache, you need to specify the starting byte index, + in bytes, and then specify the length of the rows and columns of the extracted uint array, in terms of uint as the unit. +
+ 缓存数据 + 索引位置 + 二维数组行 + 二维数组列 + uint二维数组对象 +
+ + + 从缓存中提取long结果,需要指定起始的字节索引,按照字节为单位,一个long占用八个字节
+ To extract the long result from the cache, you need to specify the starting byte index, in bytes, A long occupies eight bytes +
+ 缓存数据 + 索引位置 + long对象 +
+ + + 从缓存中提取long数组结果,需要指定起始的字节索引,按照字节为单位,然后指定提取的 long 数组的长度,如果传入 10 ,则表示提取 10 个连续的 long 数据,该数据共占用 80 字节。
+ To extract the long array result from the cache, you need to specify the starting byte index, in bytes, + and then specify the length of the long array to be extracted. If 10 is passed in, it means to extract 10 consecutive long data. Occupies 80 bytes. +
+ 缓存数据 + 索引位置 + 读取的数组长度 + long数组对象 +
+ + + 从缓存中提取long二维数组结果,需要指定起始的字节索引,按照字节为单位,然后指定提取的 long 数组的行和列的长度,按照 long 为单位的个数。
+ To extract the result of a long two-dimensional array from the cache, you need to specify the starting byte index, in bytes, + and then specify the length of the rows and columns of the extracted long array, in long as the number of units. +
+ 缓存数据 + 索引位置 + 二维数组行 + 二维数组列 + long二维数组对象 +
+ + + 从缓存中提取ulong结果,需要指定起始的字节索引,按照字节为单位,一个ulong占用八个字节 + To extract the ulong result from the cache, you need to specify the starting byte index, in bytes, A ulong occupies eight bytes + + 缓存数据 + 索引位置 + ulong对象 + + + + 从缓存中提取ulong数组结果,需要指定起始的字节索引,按照字节为单位,然后指定提取的 ulong 数组的长度,如果传入 10 ,则表示提取 10 个连续的 ulong 数据,该数据共占用 80 字节。
+ To extract the ulong array result from the cache, you need to specify the starting byte index, in bytes, + and then specify the length of the extracted ulong array. If 10 is passed in, it means to extract 10 consecutive ulong data. Occupies 80 bytes. +
+ 缓存数据 + 索引位置 + 读取的数组长度 + ulong数组对象 +
+ + + 从缓存中提取ulong二维数组结果,需要指定起始的字节索引,按照字节为单位,然后指定提取的 ulong 数组的行和列的长度,按照 ulong 为单位的个数。
+ To extract the result of the ulong two-dimensional array from the cache, you need to specify the starting byte index, in bytes, + and then specify the length of the rows and columns of the extracted ulong array, in the number of ulong units. +
+ 缓存数据 + 索引位置 + 二维数组行 + 二维数组列 + ulong二维数组对象 +
+ + + 从缓存中提取float结果,需要指定起始的字节索引,按照字节为单位,一个float占用四个字节 + To extract the float result from the cache, you need to specify the starting byte index, in units of bytes, A float occupies four bytes + + 缓存对象 + 索引位置 + float对象 + + + + 从缓存中提取float数组结果,需要指定起始的字节索引,按照字节为单位,然后指定提取的 float 数组的长度,如果传入 10 ,则表示提取 10 个连续的 float 数据,该数据共占用 40 字节。
+ To extract the result of the float array from the cache, you need to specify the starting byte index, in bytes, + and then specify the length of the extracted float array. If 10 is passed in, it means that 10 consecutive float data are extracted. Occupies 40 bytes. +
+ 缓存数据 + 索引位置 + 读取的数组长度 + float数组 +
+ + + 从缓存中提取float二维数组结果,需要指定起始的字节索引,按照字节为单位,然后指定提取的 float 数组的行和列的长度,按照 float 为单位的个数。
+ To extract the result of a float two-dimensional array from the cache, you need to specify the starting byte index, in bytes, + and then specify the length of the rows and columns of the extracted float array, in terms of the number of floats. +
+ 缓存数据 + 索引位置 + 二维数组行 + 二维数组列 + float二维数组对象 +
+ + + 从缓存中提取double结果,需要指定起始的字节索引,按照字节为单位,一个double占用八个字节
+ To extract the double result from the cache, you need to specify the starting byte index, in bytes, A double occupies eight bytes +
+ 缓存对象 + 索引位置 + double对象 +
+ + + 从缓存中提取double数组结果,需要指定起始的字节索引,按照字节为单位,然后指定提取的 double 数组的长度,如果传入 10 ,则表示提取 10 个连续的 double 数据,该数据共占用 80 字节。
+ To extract the double array result from the cache, you need to specify the starting byte index, in bytes, + and then specify the length of the extracted double array. If 10 is passed in, it means to extract 10 consecutive double data. Occupies 80 bytes. +
+ 缓存对象 + 索引位置 + 读取的数组长度 + double数组 +
+ + + 从缓存中提取double二维数组结果,需要指定起始的字节索引,按照字节为单位,然后指定提取的 double 数组的行和列的长度,按照 double 为单位的个数。
+ To extract the result of a double two-dimensional array from the cache, you need to specify the starting byte index, in bytes, + and then specify the length of the rows and columns of the extracted double array, in terms of the number of doubles. +
+ 缓存数据 + 索引位置 + 二维数组行 + 二维数组列 + double二维数组对象 +
+ + + 从缓存中提取string结果,使用指定的编码将全部的缓存转为字符串
+ Extract the string result from the cache, use the specified encoding to convert all the cache into a string +
+ 缓存对象 + 字符串的编码 + string对象 +
+ + + 从缓存中的部分字节数组转化为string结果,使用指定的编码,指定起始的字节索引,字节长度信息。
+ Convert a part of the byte array in the buffer into a string result, use the specified encoding, specify the starting byte index, and byte length information. +
+ 缓存对象 + 索引位置 + byte数组长度 + 字符串的编码 + string对象 +
+ + + bool变量转化缓存数据,一般来说单bool只能转化为0x01 或是 0x00
+ The bool variable is converted to cache data, a single bool can only be converted to 0x01 or 0x00 +
+ 等待转化的数据 + buffer数据 +
+ + + 将bool数组变量转化缓存数据,如果数组长度不满足8的倍数,则自动补0操作。
+ Convert the bool array variable to the cache data. If the length of the array does not meet a multiple of 8, it will automatically add 0. +
+ 等待转化的数组 + buffer数据 +
+ + + 将byte变量转化缓存数据
+ Convert byte variables into cached data +
+ 等待转化的数据 + buffer数据 +
+ + + short变量转化缓存数据,一个short数据可以转为2个字节的byte数组
+ Short variable is converted to cache data, a short data can be converted into a 2-byte byte array +
+ 等待转化的数据 + buffer数据 +
+ + + short数组变量转化缓存数据,n个长度的short数组,可以转为2*n个长度的byte数组
+ The short array variable transforms the buffered data, a short array of n lengths can be converted into a byte array of 2*n lengths +
+ 等待转化的数组 + buffer数据 +
+ + + ushort变量转化缓存数据,一个ushort数据可以转为2个字节的Byte数组
+ ushort variable converts buffer data, a ushort data can be converted into a 2-byte Byte array +
+ 等待转化的数据 + buffer数据 +
+ + + ushort数组变量转化缓存数据,n个长度的ushort数组,可以转为2*n个长度的byte数组
+ The ushort array variable transforms the buffer data, the ushort array of n length can be converted into a byte array of 2*n length +
+ 等待转化的数组 + buffer数据 +
+ + + int变量转化缓存数据,一个int数据可以转为4个字节的byte数组
+ Int variable converts cache data, an int data can be converted into a 4-byte byte array +
+ 等待转化的数据 + buffer数据 +
+ + + int数组变量转化缓存数据,n个长度的int数组,可以转为4*n个长度的byte数组
+ The int array variable transforms the cache data, the int array of n length can be converted to the byte array of 4*n length +
+ 等待转化的数组 + buffer数据 +
+ + + uint变量转化缓存数据,一个uint数据可以转为4个字节的byte数组
+ uint variable converts buffer data, a uint data can be converted into a 4-byte byte array +
+ 等待转化的数据 + buffer数据 +
+ + + uint数组变量转化缓存数据,n个长度的uint数组,可以转为4*n个长度的byte数组
+ uint array variable converts buffer data, uint array of n length can be converted to byte array of 4*n length +
+ 等待转化的数组 + buffer数据 +
+ + + long变量转化缓存数据,一个long数据可以转为8个字节的byte数组
+ Long variable is converted into cache data, a long data can be converted into 8-byte byte array +
+ 等待转化的数据 + buffer数据 +
+ + + long数组变量转化缓存数据,n个长度的long数组,可以转为8*n个长度的byte数组
+ The long array variable transforms the buffer data, the long array of n length can be converted into the byte array of 8*n length +
+ 等待转化的数组 + buffer数据 +
+ + + ulong变量转化缓存数据,一个ulong数据可以转为8个字节的byte数组
+ Ulong variable converts cache data, a ulong data can be converted into 8-byte byte array +
+ 等待转化的数据 + buffer数据 +
+ + + ulong数组变量转化缓存数据,n个长度的ulong数组,可以转为8*n个长度的byte数组
+ The ulong array variable transforms the buffer data, the ulong array of n length can be converted to the byte array of 8*n length +
+ 等待转化的数组 + buffer数据 +
+ + + float变量转化缓存数据,一个float数据可以转为4个字节的byte数组
+ Float variable is converted into cache data, a float data can be converted into a 4-byte byte array +
+ 等待转化的数据 + buffer数据 +
+ + + float数组变量转化缓存数据,n个长度的float数组,可以转为4*n个长度的byte数组
+ Float array variable converts buffer data, n-length float array can be converted into 4*n-length byte array +
+ 等待转化的数组 + buffer数据 +
+ + + double变量转化缓存数据,一个double数据可以转为8个字节的byte数组
+ The double variable is converted to cache data, a double data can be converted into an 8-byte byte array +
+ 等待转化的数据 + buffer数据 +
+ + + double数组变量转化缓存数据,n个长度的double数组,可以转为8*n个长度的byte数组
+ The double array variable transforms the buffer data, the double array of n length can be converted to the byte array of 8*n length +
+ 等待转化的数组 + buffer数据 +
+ + + 使用指定的编码字符串转化缓存数据
+ Use the specified encoding string to convert the cached data +
+ 等待转化的数据 + 字符串的编码方式 + buffer数据 +
+ + + 使用指定的编码字符串转化缓存数据,指定转换之后的字节长度信息
+ Use the specified encoding string to convert the cached data, specify the byte length information after conversion +
+ 等待转化的数据 + 转换之后的数据长度 + 字符串的编码方式 + buffer数据 +
+ + + 获取或设置数据解析的格式,可选ABCD, BADC,CDAB,DCBA格式,对int,uint,float,double,long,ulong类型有作用
+ Get or set the format of the data analysis, optional ABCD, BADC, CDAB, DCBA format, effective for int, uint, float, double, long, ulong type +
+
+ + + 获取或设置在解析字符串的时候是否将字节按照字单位反转
+ Gets or sets whether to reverse the bytes in word units when parsing strings +
+
+ + + 根据指定的格式,来实例化一个新的对象,除了不同,其他都相同
+ According to the specified format, to instantiate a new object, except that is different, everything else is the same +
+ 数据格式 + 新的对象 +
+ + + 常规的字节转换类
+ Regular byte conversion class +
+
+ + + + + + + + + + + + + + + 字节倒序的转换类,字节的顺序和C#的原生字节的顺序是完全相反的,高字节在前,低字节在后。
+ In the reverse byte order conversion class, the byte order is completely opposite to the native byte order of C#, + with the high byte first and the low byte following. +
+ + 适用西门子PLC的S7协议的数据转换 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + 按照字节错位的数据转换类
+ Data conversion class according to byte misalignment +
+
+ + + + + + + + + 获取或设置双字节的整数是否进行翻转操作,主要针对的类型为
+ Get or set whether the double-byte integer is to be flipped, the main types are and +
+ + 默认为 True,即发生数据翻转,当修改为 False 时,和C#的字节顺序一致 + +
+ + + + + + + + + + + + + + + + + + + + + 控制型的ascii资源信息
+ Controlled ascii resource information +
+
+ + + 空字符 + + + + + 标题开始
+ start of headling +
+
+ + + 正文开始
+ start of text +
+
+ + + 正文结束
+ end of text +
+
+ + + 传输结束
+ end of transmission +
+
+ + + 请求
+ enquiry +
+
+ + + 接到通知
+ acknowledge +
+
+ + + 响铃
+ bell +
+
+ + + 退格
+ backspace +
+
+ + + 水平制表符
+ horizontal tab +
+
+ + + 换行符
+ NL line feed, new line +
+
+ + + 垂直制表符
+ vertical tab +
+
+ + + 换页键
+ NP form feed, new page +
+
+ + + 回车键
+ carriage return +
+
+ + + 不用切换
+ shift out +
+
+ + + 启用切换
+ shift in +
+
+ + + 数据链路定义
+ data link escape +
+
+ + + 设备控制1
+ device control 1 +
+
+ + + 设备控制2
+ device control 2 +
+
+ + + 设备控制3
+ device control 3 +
+
+ + + 设备控制4
+ device control 4 +
+
+ + + 拒绝接收
+ negative acknowledge +
+
+ + + 同步空闲
+ synchronous idle +
+
+ + + 传输块结束
+ end of trans. block +
+
+ + + 取消
+ cancel +
+
+ + + 介质中断
+ end of medium +
+
+ + + 替补
+ substitute +
+
+ + + 溢出
+ escape +
+
+ + + 文件分隔符
+ file separator +
+
+ + + 分组符
+ group separator +
+
+ + + 记录分离符
+ record separator +
+
+ + + 单元分隔符
+ unit separator +
+
+ + + 证书等级 + + + + + 只允许读取数据的等级 + + + + + 允许同时读写数据的等级 + + + + + 取消操作的令牌
+ Token to cancel the operation +
+
+ + + 是否取消的操作
+ Whether to cancel the operation +
+
+ + + HslCommunication的一些静态辅助方法
+ Some static auxiliary methods of HslCommunication +
+
+ + + 本通讯项目的随机数信息
+ Random number information for this newsletter +
+
+ + + 本通讯项目单个通信对象最多的锁累积次数,超过该次数,将直接返回失败。
+ The maximum number of lock accumulations for a single communication object in this communication item, beyond which the number will be returned as a failure. +
+ + 默认为 1000 次 + +
+ + + 本通信库的单个通信对象在异步通信的时候是否使用异步锁,默认True,适用于winform,wpf等UI程序(有效防止UI上同时读写PLC时发生死锁问题),如果是控制台程序或是纯后台线程采集的程序,适合配置False
+ Whether a single communication object of this communication library uses asynchronous locks during asynchronous communication, the default is True, which is suitable for UI programs such as winform, + wpf and so on (effectively preventing deadlock problems when reading and writing PLCs at the same time on the UI), and if it is a console program or a program collected by pure background threads, it is suitable to configure False +
+
+ + + 解析地址的附加参数方法,比如你的地址是s=100;D100,可以提取出"s"的值的同时,修改地址本身,如果"s"不存在的话,返回给定的默认值
+ The method of parsing additional parameters of the address, for example, if your address is s=100;D100, you can extract the value of "s" and modify the address itself. If "s" does not exist, return the given default value +
+ 复杂的地址格式,比如:s=100;D100 + 等待提取的参数名称 + 如果提取的参数信息不存在,返回的默认值信息 + 解析后的新的数据值或是默认的给定的数据值 +
+ + + 解析地址的附加Bool类型参数方法,比如你的地址是s=true;D100,可以提取出"s"的值的同时,修改地址本身,如果"s"不存在的话,返回给定的默认值
+ The method of parsing additional parameters of the address, for example, if your address is s=true;D100, you can extract the value of "s" and modify the address itself. If "s" does not exist, return the given default value +
+ 复杂的地址格式,比如:s=true;D100 + 等待提取的参数名称 + 如果提取的参数信息不存在,返回的默认值信息 + 解析后的新的数据值或是默认的给定的数据值 +
+ + + 解析地址的附加参数方法,比如你的地址是s=100;D100,可以提取出"s"的值的同时,修改地址本身,如果"s"不存在的话,返回错误的消息内容
+ The method of parsing additional parameters of the address, for example, if your address is s=100;D100, you can extract the value of "s" and modify the address itself. + If "s" does not exist, return the wrong message content +
+ 复杂的地址格式,比如:s=100;D100 + 等待提取的参数名称 + 解析后的参数结果内容 +
+ + + 解析地址的附加bool参数方法,比如你的地址是s=true;D100,可以提取出"s"的值的同时,修改地址本身,如果"s"不存在的话,返回错误的消息内容
+ The method of parsing additional parameters of the address, for example, if your address is s=true;D100, you can extract the value of "s" and modify the address itself. + If "s" does not exist, return the wrong message content +
+ 复杂的地址格式,比如:s=true;D100 + 等待提取的参数名称 + 解析后的参数结果内容 +
+ + + 解析地址的起始地址的方法,比如你的地址是 A[1] , 那么将会返回 1,地址修改为 A,如果不存在起始地址,那么就不修改地址,返回 -1
+ The method of parsing the starting address of the address, for example, if your address is A[1], then it will return 1, + and the address will be changed to A. If the starting address does not exist, then the address will not be changed and return -1 +
+ 复杂的地址格式,比如:A[0] + 如果存在,就起始位置,不存在就返回 -1 +
+ + + 解析地址的附加参数方法,比如你的地址是format=ABCD;D100,可以提取出"format"的值的同时,修改地址本身,如果"format"不存在的话,返回默认的对象
+ Parse the additional parameter method of the address. For example, if your address is format=ABCD;D100, + you can extract the value of "format" and modify the address itself. If "format" does not exist, + Return the default object +
+ 复杂的地址格式,比如:format=ABCD;D100 + 默认的数据转换信息 + 解析后的参数结果内容 +
+ + + 切割当前的地址数据信息,根据读取的长度来分割成多次不同的读取内容,需要指定地址,总的读取长度,切割读取长度
+ Cut the current address data information, and divide it into multiple different read contents according to the read length. + You need to specify the address, the total read length, and the cut read length +
+ 整数的地址信息 + 读取长度信息 + 切割长度信息 + 切割结果 +
+ + + 根据指定的长度切割数据数组,返回地址偏移量信息和数据分割信息 + + 数组类型 + 起始的地址 + 实际的数据信息 + 分割的基本长度 + 一个地址代表的数据长度 + 切割结果内容 + + + + 获取地址信息的位索引,在地址最后一个小数点的位置 + + 地址信息 + 位索引的位置 + + + + 从当前的字符串信息获取IP地址数据,如果是ip地址直接返回,如果是域名,会自动解析IP地址,否则抛出异常
+ Get the IP address data from the current string information, if it is an ip address, return directly, + if it is a domain name, it will automatically resolve the IP address, otherwise an exception will be thrown +
+ 输入的字符串信息 + 真实的IP地址信息 +
+ + + 从流中接收指定长度的字节数组 + + 流 + 数据长度 + 二进制的字节数组 + + + + 将字符串的内容写入到流中去 + + 数据流 + 字符串内容 + + + + 从流中读取一个字符串内容 + + 数据流 + 字符串信息 + + + + 将二进制的内容写入到数据流之中 + + 数据流 + 原始字节数组 + + + + 从流中读取二进制的内容 + + 数据流 + 字节数组 + + + + 从字符串的内容提取UTF8编码的字节,加了对空的校验 + + 字符串内容 + 结果 + + + + 将多个路径合成一个更完整的路径,这个方法是多平台适用的 + + 路径的集合 + 总路径信息 + + + + [商业授权] 将原始的字节数组,转换成实际的结构体对象,需要事先定义好结构体内容,否则会转换失败
+ [Authorization] To convert the original byte array into an actual structure object, + the structure content needs to be defined in advance, otherwise the conversion will fail +
+ 自定义的结构体 + 原始的字节内容 + 是否成功的结果对象 +
+ + + 根据当前的位偏移地址及读取位长度信息,计算出实际的字节索引,字节数,字节位偏移 + + 起始地址 + 读取的长度 + 返回的新的字节的索引,仍然按照位单位 + 字节长度 + 当前偏移的信息 + + + + 根据字符串内容,获取当前的位索引地址,例如输入 6,返回6,输入15,返回15,输入B,返回11 + + 位字符串 + 结束数据 + + + + 将一个一维数组中的所有数据按照行列信息拷贝到二维数组里,返回当前的二维数组 + + 数组的类型对象 + 一维数组信息 + 行 + 列 + + + + 判断当前的字符串表示的地址,是否以索引为结束 + + PLC的字符串地址信息 + 是否以索引结束 + + + + 根据位偏移的地址,长度信息,计算出实际的地址占用长度 + + 偏移地址 + 长度信息 + 地址的进制信息,一般为8 或是 16 + 占用的地址长度信息 + + + + 根据地址的临界条件来切割读取地址的方法,支持bool地址的切割,支持字地址的切割 + + 数据的类型信息 + 读取的功能方法 + 切割的地址信息 + 实际的数据地址 + 读取的长度信息 + 使用底层的读取机制来实现真正的读取操作 + + + + + + + 等待切割的地址信息 + + + + + 实例化一个默认的对象 + + + + + 指定地址类型,临界地址,地址的进制来实例化一个对象 + + 地址类型 + 临界地址 + 地址的进制 + + + + 地址的切割类型 + + + + + 等待切割的地址的临界点 + + + + + 地址的进制信息 + + + + + 饼图的基本元素 + + + + + 实例化一个饼图基本元素的对象 + + + + + 名称 + + + + + 值 + + + + + 背景颜色 + + + + + 连接会话信息的上下文,主要是对账户信息的验证
+ The context of the connection session information, mainly the verification of account information +
+
+ + + 当前的用户名信息
+ current username information +
+
+ + + 当前的会话的ID信息
+ ID information of the current session +
+
+ + + 当前的会话信息关联的自定义信息
+ Custom information associated with the current session information +
+
+ + + 远程对象关闭的异常信息
+ Exception information of remote object close +
+
+ + + 实例化一个默认的对象 + + + + + + + + + + + + + + + + + 一个数据范围管理的的类型对象,可以方便的管理一个数据值的最大值,最小值,平均值信息。
+ A type object managed by a data range can conveniently manage the maximum, minimum, and average information of a data value. +
+
+ + + 当前的数据的最大值
+ The maximum value of the current data +
+
+ + + 当前的数据的最小值
+ The minimum value of the current data +
+
+ + + 当前的数据的平均值
+ Average value of current data +
+
+ + + 当前的数据的起始值
+ The starting value of the current data +
+
+ + + 当前的数据的当前值,也是最后一次更新的数据值
+ The current value of the current data is also the last updated data value +
+
+ + + 当前的数据的更新总个数
+ The total number of current data updates +
+
+ + + 重新设置当前的最新值,然后计算新的最大值,最小值,平均值等信息
+ Reset the current latest value, and then calculate the new maximum, minimum, average and other information +
+ 新的数据值信息 + 新的值对象 +
+ + + + + + 判断是否相等 + + 第一个数据值 + 第二个数据值 + 是否相同 + + + + 判断是否相等 + + 第一个数据值 + 第二个数据值 + 是否相同 + + + + + + + + + + 文件的基础信息 + + + + + 文件名称 + + + + + 文件大小 + + + + + 文件的标识,注释 + + + + + 文件上传人的名称 + + + + + 文件的分类信息 + + + + + 命令码 + + + + + 文件名 + + + + + 文件名列表 + + + + + 第一级分类信息 + + + + + 第二级分类信息 + + + + + 第三级分类信息 + + + + + 文件在服务器上的信息 + + + + + 文件的真实路径 + + + + + 文件标记对象类,标记了一个文件的当前状态,是否处于下载中,删除的操作信息
+ File tag object class, which marks the current status of a file, whether it is downloading, or delete operation information +
+
+ + + 实例化一个文件标记对象,需要传入日志信息和文件名
+ To instantiate a file tag object, you need to pass in log information and file name +
+ 日志对象 + 完整的文件名称 +
+ + + 当前的对象创建的时间
+ Current object creation time +
+
+ + + 当前的对象最后一次活跃的时间
+ Last active time of the current object +
+
+ + + 当前的文件的读取次数,通常也是下载次数。
+ The current number of reads of the file, usually also the number of downloads. +
+
+ + + 新增一个对当前的文件的操作,如果没有读取,就直接执行,如果有读取,就等待读取完成的时候执行。
+ Add an operation on the current file. If there is no read, it will be executed directly. If there is a read, it will be executed when the read is completed. +
+ 对当前文件的操作内容 +
+ + + 获取该对象是否能被清除
+ Gets whether the object can be cleared +
+ 是否能够删除 +
+ + + 进入文件的读取状态
+ Enter the read state of the file +
+
+ + + 离开本次的文件读取状态,如果没有任何的客户端在读取了,就执行缓存队列里的操作信息。
+ Leaving the current file reading status, if no client is reading, the operation information in the cache queue is executed. +
+
+ + + + + + 文件集容器,绑定一个文件夹的文件信息组,提供了文件夹的文件信息的获取,更新接口
+ File set container, which binds the file information group of a folder, provides the file information acquisition and update interface of the folder +
+
+ + + 实例化一个新的指定目录的文件管理容器
+ Instantiates a new file management container for the specified directory +
+ 日志记录对象,可以为空 + 文件的路径 +
+ + + 包含所有文件列表信息的json文本缓存
+ JSON text cache containing all file list information +
+
+ + + 获取文件的数量
+ Get the number of files +
+
+ + + 获取当前目录中所有子文件的下载次数统计
+ Get the download count of all subfiles in the current directory +
+
+ + + 当前的目录信息
+ Current catalog information +
+
+ + + 获取当前目录所有文件的大小之和
+ Get the sum of the size of all files in the current directory +
+ 是否携带最新的文件信息 +
+ + + 文件数量变化的委托信息
+ Order information for changes in the number of files +
+ 文件列表容器 + 文件的数量 +
+ + + 当文件数量发生变化的时候触发的事件
+ Event triggered when the number of files changes +
+
+ + + 下载文件时调用,根据当前的文件名称,例如 123.txt 获取到在文件服务器里映射的文件名称,例如返回 b35a11ec533147ca80c7f7d1713f015b7909
+ Called when downloading a file. Get the file name mapped in the file server according to the current file name, such as 123.txt. + For example, return b35a11ec533147ca80c7f7d1713f015b7909. +
+ 文件的实际名称 + 文件名映射过去的实际的文件名字 +
+ + + 上传文件时掉用,通过比对现有的文件列表,如果没有,就重新创建列表信息
+ Used when uploading files, by comparing existing file lists, if not, re-creating list information +
+ 文件名,带后缀,不带任何的路径 + 文件的大小 + 文件映射名称 + 文件的拥有者 + 文件的额外描述 + 映射的文件名称 +
+ + + 根据文件的名称获取对应的文件信息
+ Get the corresponding file information according to the file name +
+ 文件的真实名称 + 是否获取成功的结果对象 +
+ + + 删除一个文件信息,传入文件实际的名称,例如 123.txt 返回被删除的文件的guid名称,例如返回 b35a11ec533147ca80c7f7d1713f015b7909 此方法存在同名文件删除的风险
+ Delete a file information. Pass in the actual name of the file. For example, 123.txt returns the guid name of the deleted file. For example, it returns b35a11ec533147ca80c7f7d1713f015b7909. There is a risk of deleting the file with the same name +
+ 实际的文件名称,如果 123.txt + 映射之后的文件名,例如 b35a11ec533147ca80c7f7d1713f015b7909 +
+ + + 判断当前的文件名是否在文件的列表里,传入文件实际的名称,例如 123.txt,如果文件存在,返回 true, 如果不存在,返回 false
+ Determine whether the current file name is in the file list, and pass in the actual file name, such as 123.txt, + if it exists, return true, if it does not exist, return false +
+ 实际的文件名称,如果 123.txt + 如果文件存在,返回 true, 如果不存在,返回 false +
+ + + 删除一个文件信息,传入文件唯一的guid的名称,例如 b35a11ec533147ca80c7f7d1713f015b7909 返回被删除的文件的guid名称
+ Delete a file information, pass in the unique GUID name of the file, for example b35a11ec533147ca80c7f7d1713f015b7909 return the GUID name of the deleted file +
+ 实际的文件名称,如果 b35a11ec533147ca80c7f7d1713f015b7909 + 映射之后的文件名,例如 b35a11ec533147ca80c7f7d1713f015b7909 +
+ + + 删除当前目录下所有的文件信息,返回等待被删除的文件列表,是映射文件名:b35a11ec533147ca80c7f7d1713f015b7909
+ Delete all file information in the current directory, and return to the list of files waiting to be deleted, + which is the mapping file name: b35a11ec533147ca80c7f7d1713f015b7909 +
+ 映射之后的文件列表,例如 b35a11ec533147ca80c7f7d1713f015b7909 +
+ + + 缓存JSON文本的方法,该机制使用乐观并发模型完成
+ Method for caching JSON text, which is done using an optimistic concurrency model +
+
+ + + 从目录进行加载数据,必须实例化的时候加载,加载失败会导致系统异常,旧的文件丢失
+ Load data from the directory, it must be loaded when instantiating. Failure to load will cause system exceptions and old files will be lost +
+ 当前的文件夹路径信息 +
+ + + + + + 单个文件的存储信息,用来表示在文件目录管理器里表示所有的文件信息的
+ Storage information of a single file, used to represent all file information in the file directory manager +
+
+ + + 文件的名称 + + + + + 文件的大小 + + + + + 文件的映射名称 + + + + + 文件的下载次数 + + + + + 文件的上传时间 + + + + + 文件的上传人,拥有者 + + + + + 文件的额外描述 + + + + + 获取文件的大小描述
+ Get file size description +
+ 文件大小的字符串描述形式 +
+ + + + + + 用于网络传递的信息头,使用上等同于int + + + 通常用于之间的通信,以及通讯 + + + 使用上等同于int,只是本结构体允许将4字节的int拆分成3部分单独访问 + + + + + + 赋值操作,可以直接赋值int数据 + + int数值 + 等值的消息对象 + + + + 也可以赋值给int数据 + + netHandle对象 + 等值的消息对象 + + + + 判断是否相等 + + 第一个数 + 第二个数 + 等于返回True,否则False + + + + 判断是否不相等 + + 第一个对象 + 第二个对象 + 等于返回False,否则True + + + + 两个数值相加 + + 第一个对象 + 第二个对象 + 返回两个指令的和 + + + + 两个数值相减 + + 第一个对象 + 第二个对象 + 返回两个指令的差 + + + + 判断是否小于另一个数值 + + 第一个对象 + 第二个对象 + 小于则返回True,否则返回False + + + + 判断是否大于另一个数值 + + 第一个对象 + 第二个对象 + 大于则返回True,否则返回False + + + + 初始化一个暗号对象 + + 使用一个默认的数值进行初始化 + + + + 根据三个值来初始化暗号对象 + + 主暗号 + 次暗号 + 暗号编号 + + + + 完整的暗号值 + + + + + 主暗号分类0-255 + + + + + 次要的暗号分类0-255 + + + + + 暗号的编号分类0-65535 + + + + + 完整的暗号值 + + + + + 主暗号分类0-255 + + + + + 次要的暗号分类0-255 + + + + + 暗号的编号分类0-65535 + + + + + 获取完整的暗号数据 + + 返回暗号的字符串表示形式 + + + + 判断两个实例是否相同 + + 对比的对象 + 相同返回True,否则返回False + + + + 获取哈希值 + + 返回当前对象的哈希值 + + + + 用于本程序集访问通信的暗号说明 + + + + + 规定所有的网络传输指令头都为32字节 + + + + + 所有网络通信中的缓冲池数据信息 + + + + + 用于心跳程序的暗号信息 + + + + + 客户端退出消息 + + + + + 因为客户端达到上限而拒绝登录 + + + + + 允许客户端登录到服务器 + + + + + 客户端登录的暗号信息 + + + + + 客户端拒绝登录的暗号信息 + + + + + 说明发送的只是文本信息 + + + + + 发送的数据就是普通的字节数组 + + + + + 发送的数据就是普通的图片数据 + + + + + 发送的数据是一条异常的数据,字符串为异常消息 + + + + + 说明发送的数据是字符串的数组 + + + + + 请求文件下载的暗号 + + + + + 请求文件上传的暗号 + + + + + 请求删除文件的暗号 + + + + + 文件校验成功 + + + + + 文件校验失败 + + + + + 文件保存失败 + + + + + 请求文件列表的暗号 + + + + + 请求子文件的列表暗号 + + + + + 进度返回暗号 + + + + + 返回的错误信息 + + + + + 请求删除多个文件的暗号 + + + + + 请求删除文件夹的暗号 + + + + + 请求当前的文件是否存在 + + + + + 请求删除文件夹的暗号 + + + + + 请求指定文件夹的文件大小 + + + + + 指定目录的所有子目录的文件统计信息,每个文件夹的文件数量,所有文件大小,最后更新时间 + + + + + 不压缩数据字节 + + + + + 压缩数据字节 + + + + + 生成终极传送指令的方法,所有的数据均通过该方法出来 + + 命令头 + 自用自定义 + 令牌 + 字节数据 + 包装后的数据信息 + + + + 解析接收到数据,先解压缩后进行解密 + + 指令头 + 指令的内容 + 真实的数据内容 + + + + 获取发送字节数据的实际数据,带指令头 + + 用户数据 + 令牌 + 字节信息 + 包装后的指令信息 + + + + 获取发送字节数据的实际数据,带指令头 + + 用户数据 + 令牌 + 字符串数据信息 + 包装后的指令信息 + + + + 获取发送字节数据的实际数据,带指令头 + + 用户数据 + 令牌 + 字符串数据信息 + 包装后的指令信息 + + + + + + + 将字符串打包成字节数组内容 + + 字符串数组 + 打包后的原始数据内容 + + + + 将字节数组还原成真实的字符串数组 + + 原始字节数组 + 解析后的字符串内容 + + + + 从接收的数据内容提取出用户的暗号和数据内容 + + 数据内容 + 包含结果对象的信息 + + + + 应用于Hsl组件库读取的动态地址解析,具体用法为创建一个类,创建数据属性,如果这个属性需要绑定PLC的真实数据,就在属性的特性上应用本特性。
+ Applied to the dynamic address resolution read by the Hsl component library, the specific usage is to create a class and create data attributes. + If this attribute needs to be bound to the real data of the PLC, this feature is applied to the characteristics of the attribute. +
+
+ + + 设备的类型,如果指定了特殊的PLC,那么该地址就可以支持多种不同PLC
+ The type of equipment, if a special PLC is specified, then the address can support a variety of different PLCs +
+
+ + + 数据的地址信息,真实的设备的地址信息
+ Data address information, real device address information +
+
+ + + 读取的数据长度
+ Length of data read +
+
+ + + 实例化一个地址特性,指定地址信息,用于单变量的数据
+ Instantiate an address feature, specify the address information, for single variable data +
+ 真实的地址信息 +
+ + + 实例化一个地址特性,指定地址信息,用于单变量的数据,并指定设备类型
+ Instantiate an address feature, specify address information, data for a single variable, and specify the device type +
+ 真实的地址信息 + 设备的地址信息 +
+ + + 实例化一个地址特性,指定地址信息和数据长度,通常应用于数组的批量读取
+ Instantiate an address feature, specify address information and data length, usually used in batch reading of arrays +
+ 真实的地址信息 + 读取的数据长度 +
+ + + 实例化一个地址特性,指定地址信息和数据长度,通常应用于数组的批量读取,并指定设备的类型,可用于不同种类的PLC
+ Instantiate an address feature, specify address information and data length, usually used in batch reading of arrays, + and specify the type of equipment, which can be used for different types of PLCs +
+ 真实的地址信息 + 读取的数据长度 + 设备类型 +
+ + + 获取数据的数量信息,如果小于0,则返回1 + Get the quantity information of the data, if it is less than 0, return 1 + + 数据的个数 + + + + + + + Hsl相关地址的属性信息 + + + + + 该属性绑定的地址特性 + + + + + 地址绑定的属性信息 + + + + + 起始的字节偏移信息 + + + + + 读取的字节的长度信息 + + + + + 缓存的数据对象 + + + + + 可以指定方法变成对外公开的API接口,如果方法不实现该特性,将不对外公开方法,无法获取相关的接口权限
+ You can specify the method to become an externally public API interface. If the method does not implement this feature, + the method will not be publicly disclosed, and the related interface permissions cannot be obtained +
+
+ + + 当前指定的ApiTopic信息,如果当前的方法接口不指定别名,那么就使用当前的方法名称
+ The currently specified ApiTopic information, if the current method interface does not specify an alias, + then the current method name is used +
+
+ + + 当前方法的注释内容
+ The comment content of the current method +
+
+ + + 当前的属性是否需要展开API信息,默认不展开
+ Whether the current attribute needs to expand the API information, it is not expanded by default +
+
+ + + 如果当前的API接口是支持Http的请求方式,当前属性有效,例如GET,POST
+ If the current API interface is a request method that supports Http, the current attributes are valid, such as GET, POST +
+
+ + + 指定描述内容来实例化一个的对象
+ Specify the description content to instantiate an object +
+ 当前接口的描述信息 +
+ + + 指定接口的路由信息及描述内容来实例化一个的对象
+ Specify the routing information and description content of the interface to instantiate an object +
+ 指重新定当前接口的路由信息 + 当前接口的描述信息 +
+ + + 实例化一个默认的对象
+ Instantiate a default object +
+
+ + + 可以指定方法的权限内容,可以限定MQTT会话的ClientID信息或是UserName内容
+ +
+
+ + + ClientId的限定内容 + + + + + UserName的限定内容 + + + + + 检查当前的客户端ID是否通过 + + ID信息 + 是否检测成功 + + + + 检查当前的用户名是否通过 + + 用户名 + 是否检测成功 + + + + 对应redis的一个键值信息的内容 + + + + + 键值的名称 + + + + + 根据键名来读取写入当前的数据信息 + + 键名 + + + + 对应redis的一个列表信息的内容 + + + + + 列表键值的名称 + + + + + 当前的位置的索引 + + + + + 根据键名来读取写入当前的列表中的单个信息 + + 列表键名 + 当前的索引位置 + + + + 对应redis的一个列表信息的内容 + + + + + 列表键值的名称 + + + + + 当前的位置的索引 + + + + + 当前位置的结束索引 + + + + + 根据键名来读取写入当前的列表中的多个信息 + + 列表键名 + + + + 根据键名来读取写入当前的列表中的多个信息 + + 列表键名 + 开始的索引信息 + + + + 根据键名来读取写入当前的列表中的多个信息 + + 列表键名 + 开始的索引信息 + 结束的索引位置,-1为倒数第一个,以此类推。 + + + + 对应redis的一个哈希信息的内容 + + + + + 哈希键值的名称 + + + + + 当前的哈希域名称 + + + + + 根据键名来读取写入当前的哈希的单个信息 + + 哈希键名 + 哈希域名称 + + + + 反射的辅助类 + + + + + 从属性中获取对应的设备类型的地址特性信息 + + 设备类型信息 + 属性信息 + 设备类型信息 + + + + 从设备里读取支持Hsl特性的数据内容,该特性为,详细参考论坛的操作说明。 + + 自定义的数据类型对象 + 读写接口的实现 + 包含是否成功的结果对象 + + + + 从设备里读取支持Hsl特性的数据内容,该特性为,详细参考论坛的操作说明。 + + 自定义的数据类型对象 + 自定义的数据对象 + 数据读写对象 + 包含是否成功的结果对象 + + + + + 根据类型信息,直接从原始字节解析出类型对象,然后赋值给对应的对象,该对象的属性需要支持特性 才支持设置 + + 类型信息 + 缓存信息 + 起始偏移地址 + 数据变换规则对象 + 新的实例化的类型对象 + + + + 根据结构体的定义,将原始字节的数据解析出来,然后赋值给对应的对象,该对象的属性需要支持特性 才支持设置 + + 类型对象信息 + 读取的缓存数据信息 + 起始的偏移地址 + 数据变换规则对象 + + + + 使用表达式树的方式来给一个属性赋值 + + 属性信息 + 对象信息 + 实际的值 + + + + 从设备里读取支持Hsl特性的数据内容,该特性为,详细参考论坛的操作说明。 + + 自定义的数据类型对象 + 读写接口的实现 + 包含是否成功的结果对象 + + + + 从设备里读取支持Hsl特性的数据内容,该特性为,详细参考论坛的操作说明。 + + 自定义的数据类型对象 + 自定义的数据对象 + 数据读写对象 + 包含是否成功的结果对象 + + + + + 从设备里读取支持Hsl特性的数据内容, + 该特性为, + + 详细参考代码示例的操作说明。 + + 自定义的数据类型对象 + Redis的数据对象 + 包含是否成功的结果对象 + + + + 从设备里写入支持Hsl特性的数据内容, + 该特性为 + 需要注意的是写入并不支持特性,详细参考代码示例的操作说明。 + + 自定义的数据类型对象 + 等待写入的数据参数 + Redis的数据对象 + 包含是否成功的结果对象 + + + + 从设备里读取支持Hsl特性的数据内容, + 该特性为, + + 详细参考代码示例的操作说明。 + + 自定义的数据类型对象 + Redis的数据对象 + 包含是否成功的结果对象 + + + + 从设备里写入支持Hsl特性的数据内容, + 该特性为 + 需要注意的是写入并不支持特性,详细参考代码示例的操作说明。 + + 自定义的数据类型对象 + 等待写入的数据参数 + Redis的数据对象 + 包含是否成功的结果对象 + + + + 从Json数据里解析出真实的数据信息,根据方法参数列表的类型进行反解析,然后返回实际的数据数组
+ Analyze the real data information from the Json data, perform de-analysis according to the type of the method parameter list, + and then return the actual data array +
+ 当前的会话内容 + 提供的参数列表信息 + 参数变量信息 + 已经填好的实际数据的参数数组对象 +
+ + + 从url数据里解析出真实的数据信息,根据方法参数列表的类型进行反解析,然后返回实际的数据数组
+ Analyze the real data information from the url data, perform de-analysis according to the type of the method parameter list, + and then return the actual data array +
+ 当前的会话内容 + 提供的参数列表信息 + 参数变量信息 + 已经填好的实际数据的参数数组对象 +
+ + + 从方法的参数列表里,提取出实际的示例参数信息,返回一个json对象,注意:该数据是示例的数据,具体参数的限制参照服务器返回的数据声明。
+ From the parameter list of the method, extract the actual example parameter information, and return a json object. Note: The data is the example data, + and the specific parameter restrictions refer to the data declaration returned by the server. +
+ 当前需要解析的方法名称 + 当前的参数列表信息 + 当前的参数对象信息 +
+ + + 将一个对象转换成 的string 类型的对象,用于远程RPC的数据交互 + + 自定义的对象 + 转换之后的结果对象 + + + + 根据提供的类型对象,解析出符合 特性的地址列表 + + 数据类型 + 设备类型 + 类型的对象信息 + 数据变换对象 + 地址列表信息 + + + + 根据地址列表信息,数据缓存,自动解析基础类型的数据,赋值到自定义的对象上去 + + 数据解析对象 + 数据对象信息 + 地址属性列表 + 缓存数据信息 + + + + 结构体的字节偏移信息定义 + + + + + 指定偏移地址来实例化一个对象 + + 字节偏移字节信息,如果是bool,就是位偏移地址,按照位为单位 + + + + 指定偏移地址和长度信息来实例化一个对象 + + 字节偏移字节信息,如果是bool,就是位偏移地址,按照位为单位 + 长度信息,如果是普通类型,则表示数组,如果是字符串,则表示字符串占用的最大字节长度 + + + + 指定偏移地址,长度信息,编码信息来实例化一个对象,通常应用于字符串数据 + + 字节偏移字节信息,如果是bool,就是位偏移地址,按照位为单位 + 长度信息,如果是普通类型,则表示数组,如果是字符串,则表示字符串占用的最大字节长度 + 编码信息,如果是字符串类型,则表示字符串的编码信息,可选 ASCII UNICODE UTF8 GB2312 ANSI BIG-UNICODE + + + + 字节偏移字节信息,如果是bool,就是位偏移地址,按照位为单位 + + + + + 长度信息,如果是普通类型,则表示数组,如果是字符串,则表示字符串占用的最大字节长度 + + + + + 编码信息,如果是字符串类型,则表示字符串的编码信息,可选 ASCII UNICODE UTF8 GB2312 ANSI BIG-UNICODE + + + + + 加密方法,只对当前的程序集开放 + + 等待加密的数据 + 加密后的字节数据 + + + + 解密方法,只对当前的程序集开放 + + 等待解密的数据 + 解密后的字节数据 + + + + 扩展的辅助类方法 + + + + + + + + + + + + + + + + + + + + + + + 获取当前数组的倒序数组,这是一个新的实例,不改变原来的数组值
+ Get the reversed array of the current byte array, this is a new instance, does not change the original array value +
+ 输入的原始数组 + 反转之后的数组信息 +
+ + + + + + 获取Byte数组的第 bytIndex 个位置的,boolIndex偏移的bool值
+ Get the bool value of the bytIndex position of the Byte array and the boolIndex offset +
+ 字节数组信息 + 字节的偏移位置 + 指定字节的位偏移 + bool值 +
+ + + 获取Byte数组的第 boolIndex 偏移的bool值,这个偏移值可以为 10,就是第 1 个字节的 第3位
+ Get the bool value of the boolIndex offset of the Byte array. The offset value can be 10, which is the third bit of the first byte +
+ 字节数组信息 + 指定字节的位偏移 + bool值 +
+ + + 获取Byte的第 boolIndex 偏移的bool值,比如3,就是第4位
+ Get the bool value of Byte's boolIndex offset, such as 3, which is the 4th bit +
+ 字节信息 + 指定字节的位偏移 + bool值 +
+ + + 获取short类型数据的第 boolIndex (从0起始)偏移的bool值,比如3,就是第4位
+ Get the bool value of the boolIndex (starting from 0) offset of the short type data, such as 3, which is the 4th bit +
+ short数据值 + 位偏移索引,从0开始 + bool值 +
+ + + 获取ushort类型数据的第 boolIndex (从0起始)偏移的bool值,比如3,就是第4位
+ Get the bool value of the boolIndex (starting from 0) offset of the ushort type data, such as 3, which is the 4th bit +
+ ushort数据值 + 位偏移索引,从0开始 + bool值 +
+ + + 获取int类型数据的第 boolIndex (从0起始)偏移的bool值,比如3,就是第4位
+ Get the bool value of the boolIndex (starting from 0) offset of the int type data, such as 3, which is the 4th bit +
+ int数据值 + 位偏移索引,从0开始 + bool值 +
+ + + 获取uint类型数据的第 boolIndex (从0起始)偏移的bool值,比如3,就是第4位
+ Get the bool value of the boolIndex (starting from 0) offset of the uint type data, such as 3, which is the 4th bit +
+ uint数据值 + 位偏移索引,从0开始 + bool值 +
+ + + 获取long类型数据的第 boolIndex (从0起始)偏移的bool值,比如3,就是第4位
+ Get the bool value of the boolIndex (starting from 0) offset of the long type data, such as 3, which is the 4th bit +
+ long数据值 + 位偏移索引,从0开始 + bool值 +
+ + + 获取ulong类型数据的第 boolIndex (从0起始)偏移的bool值,比如3,就是第4位
+ Get the bool value of the boolIndex (starting from 0) offset of the ulong type data, such as 3, which is the 4th bit +
+ ulong数据值 + 位偏移索引,从0开始 + bool值 +
+ + + 从字节数组里提取字符串数据,如果碰到0x00字节,就直接结束 + + 原始字节信息 + 起始的偏移地址 + 字节长度信息 + 编码 + 字符串信息 + + + + 设置Byte的第 boolIndex 位的bool值,可以强制为 true 或是 false, 不影响其他的位
+ Set the bool value of the boolIndex bit of Byte, which can be forced to true or false, without affecting other bits +
+ 字节信息 + 指定字节的位偏移 + bool的值 + 修改之后的byte值 +
+ + + 设置Byte[]的第 boolIndex 位的bool值,可以强制为 true 或是 false, 不影响其他的位,如果是第 10 位,则表示第 1 个字节的第 2 位(都是从 0 地址开始算的)
+ Set the bool value of the boolIndex bit of Byte[], which can be forced to true or false, without affecting other bits. + If it is the 10th bit, it means the second bit of the first byte (both starting from the 0 address Calculated) +
+ 字节数组信息 + 位偏移的索引 + bool的值 +
+ + + 修改short数据的某个位,并且返回修改后的值,不影响原来的值。位索引为 0~15,之外的值会引发异常
+ Modify a bit of short data and return the modified value without affecting the original value. Bit index is 0~15, values outside will raise an exception +
+ 等待修改的short值 + 位索引,位索引为 0~15,之外的值会引发异常 + bool值 + 修改之后的short值 +
+ + + 修改ushort数据的某个位,并且返回修改后的值,不影响原来的值。位索引为 0~15,之外的值会引发异常
+ Modify a bit of ushort data and return the modified value without affecting the original value. Bit index is 0~15, values outside will raise an exception +
+ 等待修改的ushort值 + 位索引,位索引为 0~15,之外的值会引发异常 + bool值 + 修改之后的ushort值 +
+ + + 修改int数据的某个位,并且返回修改后的值,不影响原来的值。位索引为 0~31,之外的值会引发异常
+ Modify a bit of int data and return the modified value without affecting the original value. Bit index is 0~31, values outside will raise an exception +
+ 等待修改的int值 + 位索引,位索引为 0~31,之外的值会引发异常 + bool值 + 修改之后的int值 +
+ + + 修改uint数据的某个位,并且返回修改后的值,不影响原来的值。位索引为 0~31,之外的值会引发异常
+ Modify a bit of uint data and return the modified value without affecting the original value. Bit index is 0~31, values outside will raise an exception +
+ 等待修改的uint值 + 位索引,位索引为 0~31,之外的值会引发异常 + bool值 + 修改之后的uint值 +
+ + + 修改long数据的某个位,并且返回修改后的值,不影响原来的值。位索引为 0~63,之外的值会引发异常
+ Modify a bit of long data and return the modified value without affecting the original value. Bit index is 0~63, values outside will raise an exception +
+ 等待修改的long值 + 位索引,位索引为 0~63,之外的值会引发异常 + bool值 + 修改之后的long值 +
+ + + 修改ulong数据的某个位,并且返回修改后的值,不影响原来的值。位索引为 0~63,之外的值会引发异常
+ Modify a bit of ulong data and return the modified value without affecting the original value. Bit index is 0~63, values outside will raise an exception +
+ 等待修改的ulong值 + 位索引,位索引为 0~63,之外的值会引发异常 + bool值 + 修改之后的ulong值 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + 移除指定字符串数据的最后 length 个字符。如果字符串本身的长度不足 length,则返回为空字符串。
+ Remove the last "length" characters of the specified string data. If the length of the string itself is less than length, + an empty string is returned. +
+ 等待操作的字符串数据 + 准备移除的长度信息 + 移除之后的数据信息 +
+ + + 将指定的数据添加到数组的每个元素上去,会改变每个元素的值 + + 原始数组 + 值 + 修改后的数组信息 + + + + 将指定的数据添加到数组的每个元素上去,使用表达式树的形式实现,将会修改原数组。不适用byte类型 + + 数组的类型 + 原始数据 + 数据值 + 返回的结果信息 + + + + 拷贝当前的实例数组,是基于引用层的浅拷贝,如果类型为值类型,那就是深度拷贝,如果类型为引用类型,就是浅拷贝 + + 类型对象 + 数组对象 + 拷贝的结果内容 + + + + + + + + + + 将字符串数组转换为实际的数据数组。例如字符串格式[1,2,3,4,5],可以转成实际的数组对象
+ Converts a string array into an actual data array. For example, the string format [1,2,3,4,5] can be converted into an actual array object +
+ 类型对象 + 字符串数据 + 转换方法 + 实际的数组 +
+ + + 将字符串数组转换为实际的数据数组。支持byte,sbyte,bool,short,ushort,int,uint,long,ulong,float,double,使用默认的十进制,例如字符串格式[1,2,3,4,5],可以转成实际的数组对象
+ Converts a string array into an actual data array. Support byte, sbyte, bool, short, ushort, int, uint, long, ulong, float, double, use the default decimal, + such as the string format [1,2,3,4,5], which can be converted into an actual array Object +
+ 类型对象 + 字符串数据 + 实际的数组 +
+ + + 启动接收数据,需要传入回调方法,传递对象
+ To start receiving data, you need to pass in a callback method and pass an object +
+ socket对象 + 回调方法 + 数据对象 + 是否启动成功 +
+ + + 启动接收数据,需要传入回调方法,传递对象默认为socket本身
+ To start receiving data, you need to pass in a callback method. The default object is the socket itself. +
+ socket对象 + 回调方法 + 是否启动成功 +
+ + + 结束挂起的异步读取,返回读取的字节数,如果成功的情况。
+ Ends the pending asynchronous read and returns the number of bytes read, if successful. +
+ socket对象 + 回调方法 + 是否启动成功 +
+ + + 根据英文小数点进行切割字符串,去除空白的字符
+ Cut the string according to the English decimal point and remove the blank characters +
+ 字符串本身 + 切割好的字符串数组,例如输入 "100.5",返回 "100", "5" +
+ + + 获取当前对象的JSON格式表示的字符串。
+ Gets the string represented by the JSON format of the current object. +
+ 字符串对象 +
+ + + + + + + + + + + + + + + + + + 将数据写入到字节流,字节顺序为相反
+ Write data to the byte stream, the byte order is reversed +
+ 字节流 + 等待写入的值 +
+ + + 设置套接字的活动时间和活动间歇时间,此值会设置到socket低级别的控制中,传入值如果为负数,则表示不使用 KeepAlive 功能。
+ Set the active time and active intermittent time of the socket. This value will be set to the low-level control of the socket. + If the incoming value is a negative number, it means that the KeepAlive function is not used. +
+ 套接字对象 + 保持活动时间 + 保持活动的间歇时间 + 返回获取的参数的字节 +
+ + + 使用格式化的串口参数信息来初始化串口的参数,举例:9600-8-N-1,分别表示波特率,数据位,奇偶校验,停止位,当然也可以携带串口名称,例如:COM3-9600-8-N-1,linux环境也是支持的。
+ Use the formatted serial port parameter information to initialize the serial port parameters, for example: 9600-8-N-1, which means baud rate, data bit, parity, + stop bit, of course, can also carry the serial port name, for example: COM3- 9600-8-N-1, linux environment is also supported. +
+ + 其中奇偶校验的字母可选,N:无校验,O:奇校验,E:偶校验,停止位可选 0, 1, 2, 1.5 四种选项
+ Among them, the letters of the parity check are optional, N: no check, O: odd check, E: even check, stop bit optional 0, 1, 2, 1.5 four options +
+ 串口对象信息 + 格式化的参数内容,例如:9600-8-N-1 +
+ + + 从串口接收指定长度的字节数组信息,还可以指定超时时间,以及休眠间歇时间。
+ Receive byte array information of specified length from the serial port, and can also specify the timeout time and sleep intermittent time. +
+ 串口信息 + 准备接收的字节长度 + 超时时间 + 间歇休眠时间 + 接收的结果内容对象 +
+ + + 根据指定的字节长度信息,获取到随机的字节信息
+ Obtain random byte information according to the specified byte length information +
+ 随机数对象 + 字节的长度信息 + 原始字节数组 +
+ + + + + + 超时操作的类
+ a class use to indicate the time-out of the connection +
+ + 本类自动启动一个静态线程来处理 + +
+ + + 实例化一个默认的对象
+ Instantiate a default object +
+
+ + + 当前超时对象的唯一ID信息,没实例化一个对象,id信息就会自增1
+ The unique ID information of the current timeout object. If an object is not instantiated, the id information will increase by 1 +
+
+ + + 操作的开始时间
+ Start time of operation +
+
+ + + 操作是否成功,当操作完成的时候,需要设置为True,超时检测自动结束。如果一直为False,超时检测到超时,设置True
+ Whether the operation is successful, when the operation is completed, it needs to be set to True, + and the timeout detection will automatically end. If it is always False, + the timeout is detected by the timeout, set to True +
+
+ + + 延时的时间,单位毫秒
+ Delay time, in milliseconds +
+
+ + + 连接超时用的Socket,本超时对象主要针对套接字的连接,接收数据的超时检测,也可以设置为空,用作其他用途的超时检测。
+ Socket used for connection timeout. This timeout object is mainly for socket connection and timeout detection of received data. + It can also be set to empty for other purposes. +
+
+ + + 是否发生了超时的操作,当调用方因为异常结束的时候,需要对进行判断,是否因为发送了超时导致的异常
+ Whether a timeout operation has occurred, when the caller ends abnormally, + it needs to judge , whether it is an exception caused by a timeout sent +
+
+ + + 获取到目前为止所花费的时间
+ Get the time spent so far +
+ 时间信息 +
+ + + + + + 新增一个超时检测的对象,当操作完成的时候,需要自行标记对象的True
+ Add a new object for timeout detection. When the operation is completed, + you need to mark the of the object as True +
+ 超时对象 +
+ + + 获取或设置当前的超时线程的状态日志信息,只要实例化,即可记录当前的超时日志运行信息
+ Obtain or set the status log information of the current timeout thread, and record the current timeout log operation information as long as it is instantiated +
+
+ + + 当前的超时对象处理的总个数,如果需要重置该值,方便重新计数,请调用如下代码:long current = Interlocked.Exchange( ref HslCommunication.HslTimeOut.TimeoutDealCount, 0 );
+ The total number of timeout objects processed at present, if you need to reset the value to facilitate recounting, call the following code: long current = Interlocked.Exchange( ref HslCommunication.HslTimeOut.TimeoutDealCount, 0 ); +
+
+ + + 获取当前检查超时对象的个数
+ Get the number of current check timeout objects +
+
+ + + 获取当前的所有的等待超时检查对象列表,请勿手动更改对象的属性值
+ Get the current list of all waiting timeout check objects, do not manually change the property value of the object +
+ HslTimeOut数组,请勿手动更改对象的属性值 +
+ + + 新增一个超时检测的对象,需要指定socket,超时时间,返回对象,用作标记完成信息
+ Add a new object for timeout detection, you need to specify the socket, the timeout period, + and return the object for marking completion information +
+ 网络套接字 + 超时时间,单位为毫秒
Timeout period, in milliseconds +
+ + + 整个HslCommunication的检测超时的核心方法,由一个单独的线程运行,线程的优先级很高,当前其他所有的超时信息都可以放到这里处理
+ The core method of detecting the timeout of th e entire HslCommunication is run by a separate thread. + The priority of the thread is very high. All other timeout information can be processed here. +
+ 需要传入线程的id信息 +
+ + + 用于PLC通讯及ModBus自定义数据类型的读写操作 + + + 主要应用于设备实现设备类的自定义的数据类型读写,以此达到简化代码的操作,但是有一个前提,该数据处于连续的数据区块 + + + 此处举例读取三菱的自定义的数据,先实现接口,然后再读写操作 + + 接下来就可以实现数据的读取了 + + + + + + 读取的数据长度,对于西门子,等同于字节数,对于三菱和Modbus为字节数的一半 + + + + + 从字节数组进行解析实际的对象 + + 从远程读取的数据源 + + + + 将对象生成字符源,写入PLC中 + + 准备写入到远程的数据 + + + + 操作结果的类,只带有成功标志和错误信息
+ The class that operates the result, with only success flags and error messages +
+ + 当 为 True 时,忽略 的值 + +
+ + + 实例化一个默认的结果对象 + + + + + 使用指定的消息实例化一个默认的结果对象 + + 错误消息 + + + + 使用错误代码,消息文本来实例化对象 + + 错误代码 + 错误消息 + + + + 指示本次操作是否成功。
+ Indicates whether this operation was successful. +
+
+ + + 具体的错误描述。
+ Specific error description. +
+
+ + + 具体的错误代码。
+ The specific error code. +
+
+ + + 获取错误代号及文本描述。
+ Get the error code and text description. +
+ 包含错误码及错误消息 +
+ + + 从另一个结果类中拷贝错误信息,主要是针对错误码和错误消息。
+ Copy error information from another result class, mainly for error codes and error messages. +
+ 支持结果类及派生类 + 结果类及派生类的对象 +
+ + + 将当前的结果对象转换到指定泛型的结果类对象,如果当前结果为失败,则返回指定泛型的失败结果类对象
+ Convert the current result object to the result class object of the specified generic type, + if the current result is a failure, then return the result class object of the specified generic type failure +
+ 结果类型 + 如果操作成功将赋予的结果内容 + 最终的结果类对象 +
+ + + 将当前的结果对象转换到指定泛型的结果类对象,直接返回指定泛型的失败结果类对象
+ Convert the current result object to the result class object of the specified generic type, + and directly return the result class object of the specified generic type failure +
+ 结果类型 + 最终失败的结果类对象 +
+ + + 将当前的结果对象转换到指定泛型的结果类对象,如果当前结果为失败,则返回指定泛型的失败结果类对象
+ Convert the current result object to the result class object of the specified generic type, + if the current result is a failure, then return the result class object of the specified generic type failure +
+ 泛型参数一 + 泛型参数二 + 如果操作成功将赋予的结果内容一 + 如果操作成功将赋予的结果内容二 + 最终的结果类对象 +
+ + + 将当前的结果对象转换到指定泛型的结果类对象,直接返回指定泛型的失败结果类对象
+ Convert the current result object to the result class object of the specified generic type, + and directly return the result class object of the specified generic type failure +
+ 泛型参数一 + 泛型参数二 + 最终失败的结果类对象 +
+ + + 将当前的结果对象转换到指定泛型的结果类对象,如果当前结果为失败,则返回指定泛型的失败结果类对象
+ Convert the current result object to the result class object of the specified generic type, + if the current result is a failure, then return the result class object of the specified generic type failure +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 如果操作成功将赋予的结果内容一 + 如果操作成功将赋予的结果内容二 + 如果操作成功将赋予的结果内容三 + 最终的结果类对象 +
+ + + 将当前的结果对象转换到指定泛型的结果类对象,直接返回指定泛型的失败结果类对象
+ Convert the current result object to the result class object of the specified generic type, + and directly return the result class object of the specified generic type failure +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 最终失败的结果类对象 +
+ + + 将当前的结果对象转换到指定泛型的结果类对象,如果当前结果为失败,则返回指定泛型的失败结果类对象
+ Convert the current result object to the result class object of the specified generic type, + if the current result is a failure, then return the result class object of the specified generic type failure +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 如果操作成功将赋予的结果内容一 + 如果操作成功将赋予的结果内容二 + 如果操作成功将赋予的结果内容三 + 如果操作成功将赋予的结果内容四 + 最终的结果类对象 +
+ + + 将当前的结果对象转换到指定泛型的结果类对象,直接返回指定泛型的失败结果类对象
+ Convert the current result object to the result class object of the specified generic type, + and directly return the result class object of the specified generic type failure +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 最终失败的结果类对象 +
+ + + 将当前的结果对象转换到指定泛型的结果类对象,如果当前结果为失败,则返回指定泛型的失败结果类对象
+ Convert the current result object to the result class object of the specified generic type, + if the current result is a failure, then return the result class object of the specified generic type failure +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 如果操作成功将赋予的结果内容一 + 如果操作成功将赋予的结果内容二 + 如果操作成功将赋予的结果内容三 + 如果操作成功将赋予的结果内容四 + 如果操作成功将赋予的结果内容五 + 最终的结果类对象 +
+ + + 将当前的结果对象转换到指定泛型的结果类对象,直接返回指定泛型的失败结果类对象
+ Convert the current result object to the result class object of the specified generic type, + and directly return the result class object of the specified generic type failure +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 最终失败的结果类对象 +
+ + + 将当前的结果对象转换到指定泛型的结果类对象,如果当前结果为失败,则返回指定泛型的失败结果类对象
+ Convert the current result object to the result class object of the specified generic type, + if the current result is a failure, then return the result class object of the specified generic type failure +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 如果操作成功将赋予的结果内容一 + 如果操作成功将赋予的结果内容二 + 如果操作成功将赋予的结果内容三 + 如果操作成功将赋予的结果内容四 + 如果操作成功将赋予的结果内容五 + 如果操作成功将赋予的结果内容六 + 最终的结果类对象 +
+ + + 将当前的结果对象转换到指定泛型的结果类对象,直接返回指定泛型的失败结果类对象
+ Convert the current result object to the result class object of the specified generic type, + and directly return the result class object of the specified generic type failure +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 最终失败的结果类对象 +
+ + + 将当前的结果对象转换到指定泛型的结果类对象,如果当前结果为失败,则返回指定泛型的失败结果类对象
+ Convert the current result object to the result class object of the specified generic type, + if the current result is a failure, then return the result class object of the specified generic type failure +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 如果操作成功将赋予的结果内容一 + 如果操作成功将赋予的结果内容二 + 如果操作成功将赋予的结果内容三 + 如果操作成功将赋予的结果内容四 + 如果操作成功将赋予的结果内容五 + 如果操作成功将赋予的结果内容六 + 如果操作成功将赋予的结果内容七 + 最终的结果类对象 +
+ + + 将当前的结果对象转换到指定泛型的结果类对象,直接返回指定泛型的失败结果类对象
+ Convert the current result object to the result class object of the specified generic type, + and directly return the result class object of the specified generic type failure +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 最终失败的结果类对象 +
+ + + 将当前的结果对象转换到指定泛型的结果类对象,如果当前结果为失败,则返回指定泛型的失败结果类对象
+ Convert the current result object to the result class object of the specified generic type, + if the current result is a failure, then return the result class object of the specified generic type failure +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 泛型参数八 + 如果操作成功将赋予的结果内容一 + 如果操作成功将赋予的结果内容二 + 如果操作成功将赋予的结果内容三 + 如果操作成功将赋予的结果内容四 + 如果操作成功将赋予的结果内容五 + 如果操作成功将赋予的结果内容六 + 如果操作成功将赋予的结果内容七 + 如果操作成功将赋予的结果内容八 + 最终的结果类对象 +
+ + + 将当前的结果对象转换到指定泛型的结果类对象,直接返回指定泛型的失败结果类对象
+ Convert the current result object to the result class object of the specified generic type, + and directly return the result class object of the specified generic type failure +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 泛型参数八 + 最终失败的结果类对象 +
+ + + 将当前的结果对象转换到指定泛型的结果类对象,如果当前结果为失败,则返回指定泛型的失败结果类对象
+ Convert the current result object to the result class object of the specified generic type, + if the current result is a failure, then return the result class object of the specified generic type failure +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 泛型参数八 + 泛型参数九 + 如果操作成功将赋予的结果内容一 + 如果操作成功将赋予的结果内容二 + 如果操作成功将赋予的结果内容三 + 如果操作成功将赋予的结果内容四 + 如果操作成功将赋予的结果内容五 + 如果操作成功将赋予的结果内容六 + 如果操作成功将赋予的结果内容七 + 如果操作成功将赋予的结果内容八 + 如果操作成功将赋予的结果内容九 + 最终的结果类对象 +
+ + + 将当前的结果对象转换到指定泛型的结果类对象,直接返回指定泛型的失败结果类对象
+ Convert the current result object to the result class object of the specified generic type, + and directly return the result class object of the specified generic type failure +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 泛型参数八 + 泛型参数九 + 最终失败的结果类对象 +
+ + + 将当前的结果对象转换到指定泛型的结果类对象,如果当前结果为失败,则返回指定泛型的失败结果类对象
+ Convert the current result object to the result class object of the specified generic type, + if the current result is a failure, then return the result class object of the specified generic type failure +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 泛型参数八 + 泛型参数九 + 泛型参数十 + 如果操作成功将赋予的结果内容一 + 如果操作成功将赋予的结果内容二 + 如果操作成功将赋予的结果内容三 + 如果操作成功将赋予的结果内容四 + 如果操作成功将赋予的结果内容五 + 如果操作成功将赋予的结果内容六 + 如果操作成功将赋予的结果内容七 + 如果操作成功将赋予的结果内容八 + 如果操作成功将赋予的结果内容九 + 如果操作成功将赋予的结果内容十 + 最终的结果类对象 +
+ + + 将当前的结果对象转换到指定泛型的结果类对象,直接返回指定泛型的失败结果类对象
+ Convert the current result object to the result class object of the specified generic type, + and directly return the result class object of the specified generic type failure +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 泛型参数八 + 泛型参数九 + 泛型参数十 + 最终失败的结果类对象 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 泛型参数八 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 泛型参数八 + 泛型参数九 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 泛型参数八 + 泛型参数九 + 泛型参数十 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 创建并返回一个失败的结果对象,该对象复制另一个结果对象的错误信息 + + 目标数据类型 + 之前的结果对象 + 带默认泛型对象的失败结果类 + + + + 创建并返回一个失败的结果对象,该对象复制另一个结果对象的错误信息 + + 目标数据类型一 + 目标数据类型二 + 之前的结果对象 + 带默认泛型对象的失败结果类 + + + + 创建并返回一个失败的结果对象,该对象复制另一个结果对象的错误信息 + + 目标数据类型一 + 目标数据类型二 + 目标数据类型三 + 之前的结果对象 + 带默认泛型对象的失败结果类 + + + + 创建并返回一个失败的结果对象,该对象复制另一个结果对象的错误信息 + + 目标数据类型一 + 目标数据类型二 + 目标数据类型三 + 目标数据类型四 + 之前的结果对象 + 带默认泛型对象的失败结果类 + + + + 创建并返回一个失败的结果对象,该对象复制另一个结果对象的错误信息 + + 目标数据类型一 + 目标数据类型二 + 目标数据类型三 + 目标数据类型四 + 目标数据类型五 + 之前的结果对象 + 带默认泛型对象的失败结果类 + + + + 创建并返回一个失败的结果对象,该对象复制另一个结果对象的错误信息 + + 目标数据类型一 + 目标数据类型二 + 目标数据类型三 + 目标数据类型四 + 目标数据类型五 + 目标数据类型六 + 之前的结果对象 + 带默认泛型对象的失败结果类 + + + + 创建并返回一个失败的结果对象,该对象复制另一个结果对象的错误信息 + + 目标数据类型一 + 目标数据类型二 + 目标数据类型三 + 目标数据类型四 + 目标数据类型五 + 目标数据类型六 + 目标数据类型七 + 之前的结果对象 + 带默认泛型对象的失败结果类 + + + + 创建并返回一个失败的结果对象,该对象复制另一个结果对象的错误信息 + + 目标数据类型一 + 目标数据类型二 + 目标数据类型三 + 目标数据类型四 + 目标数据类型五 + 目标数据类型六 + 目标数据类型七 + 目标数据类型八 + 之前的结果对象 + 带默认泛型对象的失败结果类 + + + + 创建并返回一个失败的结果对象,该对象复制另一个结果对象的错误信息 + + 目标数据类型一 + 目标数据类型二 + 目标数据类型三 + 目标数据类型四 + 目标数据类型五 + 目标数据类型六 + 目标数据类型七 + 目标数据类型八 + 目标数据类型九 + 之前的结果对象 + 带默认泛型对象的失败结果类 + + + + 创建并返回一个失败的结果对象,该对象复制另一个结果对象的错误信息 + + 目标数据类型一 + 目标数据类型二 + 目标数据类型三 + 目标数据类型四 + 目标数据类型五 + 目标数据类型六 + 目标数据类型七 + 目标数据类型八 + 目标数据类型九 + 目标数据类型十 + 之前的结果对象 + 带默认泛型对象的失败结果类 + + + + 创建并返回一个成功的结果对象 + + 成功的结果对象 + + + + 创建并返回一个成功的结果对象,并带有一个参数对象 + + 参数类型 + 类型的值对象 + 成功的结果对象 + + + + 创建并返回一个成功的结果对象,并带有两个参数对象 + + 第一个参数类型 + 第二个参数类型 + 类型一对象 + 类型二对象 + 成的结果对象 + + + + 创建并返回一个成功的结果对象,并带有三个参数对象 + + 第一个参数类型 + 第二个参数类型 + 第三个参数类型 + 类型一对象 + 类型二对象 + 类型三对象 + 成的结果对象 + + + + 创建并返回一个成功的结果对象,并带有四个参数对象 + + 第一个参数类型 + 第二个参数类型 + 第三个参数类型 + 第四个参数类型 + 类型一对象 + 类型二对象 + 类型三对象 + 类型四对象 + 成的结果对象 + + + + 创建并返回一个成功的结果对象,并带有五个参数对象 + + 第一个参数类型 + 第二个参数类型 + 第三个参数类型 + 第四个参数类型 + 第五个参数类型 + 类型一对象 + 类型二对象 + 类型三对象 + 类型四对象 + 类型五对象 + 成的结果对象 + + + + 创建并返回一个成功的结果对象,并带有六个参数对象 + + 第一个参数类型 + 第二个参数类型 + 第三个参数类型 + 第四个参数类型 + 第五个参数类型 + 第六个参数类型 + 类型一对象 + 类型二对象 + 类型三对象 + 类型四对象 + 类型五对象 + 类型六对象 + 成的结果对象 + + + + 创建并返回一个成功的结果对象,并带有七个参数对象 + + 第一个参数类型 + 第二个参数类型 + 第三个参数类型 + 第四个参数类型 + 第五个参数类型 + 第六个参数类型 + 第七个参数类型 + 类型一对象 + 类型二对象 + 类型三对象 + 类型四对象 + 类型五对象 + 类型六对象 + 类型七对象 + 成的结果对象 + + + + 创建并返回一个成功的结果对象,并带有八个参数对象 + + 第一个参数类型 + 第二个参数类型 + 第三个参数类型 + 第四个参数类型 + 第五个参数类型 + 第六个参数类型 + 第七个参数类型 + 第八个参数类型 + 类型一对象 + 类型二对象 + 类型三对象 + 类型四对象 + 类型五对象 + 类型六对象 + 类型七对象 + 类型八对象 + 成的结果对象 + + + + 创建并返回一个成功的结果对象,并带有九个参数对象 + + 第一个参数类型 + 第二个参数类型 + 第三个参数类型 + 第四个参数类型 + 第五个参数类型 + 第六个参数类型 + 第七个参数类型 + 第八个参数类型 + 第九个参数类型 + 类型一对象 + 类型二对象 + 类型三对象 + 类型四对象 + 类型五对象 + 类型六对象 + 类型七对象 + 类型八对象 + 类型九对象 + 成的结果对象 + + + + 创建并返回一个成功的结果对象,并带有十个参数对象 + + 第一个参数类型 + 第二个参数类型 + 第三个参数类型 + 第四个参数类型 + 第五个参数类型 + 第六个参数类型 + 第七个参数类型 + 第八个参数类型 + 第九个参数类型 + 第十个参数类型 + 类型一对象 + 类型二对象 + 类型三对象 + 类型四对象 + 类型五对象 + 类型六对象 + 类型七对象 + 类型八对象 + 类型九对象 + 类型十对象 + 成的结果对象 + + + + 操作结果的泛型类,允许带一个用户自定义的泛型对象,推荐使用这个类 + + 泛型类 + + + + 实例化一个默认的结果对象 + + + + + 使用指定的消息实例化一个默认的结果对象 + + 错误消息 + + + + 使用错误代码,消息文本来实例化对象 + + 错误代码 + 错误消息 + + + + 用户自定义的泛型数据 + + + + + 返回一个检查结果对象,可以进行自定义的数据检查。
+ Returns a check result object that allows you to perform custom data checks. +
+ 检查的委托方法 + 检查失败的错误消息 + 如果检查成功,则返回对象本身,如果失败,返回错误信息。 +
+ + + 返回一个检查结果对象,可以进行自定义的数据检查。
+ Returns a check result object that allows you to perform custom data checks. +
+ 检查的委托方法 + 如果检查成功,则返回对象本身,如果失败,返回错误信息。 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。 + Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. + + 泛型参数 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 + + + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 泛型参数八 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 泛型参数八 + 泛型参数九 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 泛型参数八 + 泛型参数九 + 泛型参数十 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 操作结果的泛型类,允许带两个用户自定义的泛型对象,推荐使用这个类 + + 泛型类 + 泛型类 + + + + 实例化一个默认的结果对象 + + + + + 使用指定的消息实例化一个默认的结果对象 + + 错误消息 + + + + 使用错误代码,消息文本来实例化对象 + + 错误代码 + 错误消息 + + + + 用户自定义的泛型数据1 + + + + + 用户自定义的泛型数据2 + + + + + 返回一个检查结果对象,可以进行自定义的数据检查。
+ Returns a check result object that allows you to perform custom data checks. +
+ 检查的委托方法 + 可以自由指定的错误信息 + 如果检查成功,则返回对象本身,如果失败,返回错误信息。 +
+ + + 返回一个检查结果对象,可以进行自定义的数据检查。
+ Returns a check result object that allows you to perform custom data checks. +
+ 检查的委托方法 + 如果检查成功,则返回对象本身,如果失败,返回错误信息。 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。 + + 泛型参数 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 + + + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 泛型参数八 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 泛型参数八 + 泛型参数九 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 泛型参数八 + 泛型参数九 + 泛型参数十 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 操作结果的泛型类,允许带三个用户自定义的泛型对象,推荐使用这个类 + + 泛型类 + 泛型类 + 泛型类 + + + + 实例化一个默认的结果对象 + + + + + 使用指定的消息实例化一个默认的结果对象 + + 错误消息 + + + + 使用错误代码,消息文本来实例化对象 + + 错误代码 + 错误消息 + + + + 用户自定义的泛型数据1 + + + + + 用户自定义的泛型数据2 + + + + + 用户自定义的泛型数据3 + + + + + 返回一个检查结果对象,可以进行自定义的数据检查。
+ Returns a check result object that allows you to perform custom data checks. +
+ 检查的委托方法 + 检查失败的错误消息 + 如果检查成功,则返回对象本身,如果失败,返回错误信息。 +
+ + + 返回一个检查结果对象,可以进行自定义的数据检查。
+ Returns a check result object that allows you to perform custom data checks. +
+ 检查的委托方法 + 如果检查成功,则返回对象本身,如果失败,返回错误信息。 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。 + + 泛型参数 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 + + + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 泛型参数八 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 泛型参数八 + 泛型参数九 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 泛型参数八 + 泛型参数九 + 泛型参数十 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 操作结果的泛型类,允许带四个用户自定义的泛型对象,推荐使用这个类 + + 泛型类 + 泛型类 + 泛型类 + 泛型类 + + + + 实例化一个默认的结果对象 + + + + + 使用指定的消息实例化一个默认的结果对象 + + 错误消息 + + + + 使用错误代码,消息文本来实例化对象 + + 错误代码 + 错误消息 + + + + 用户自定义的泛型数据1 + + + + + 用户自定义的泛型数据2 + + + + + 用户自定义的泛型数据3 + + + + + 用户自定义的泛型数据4 + + + + + 返回一个检查结果对象,可以进行自定义的数据检查。
+ Returns a check result object that allows you to perform custom data checks. +
+ 检查的委托方法 + 检查失败的错误消息 + 如果检查成功,则返回对象本身,如果失败,返回错误信息。 +
+ + + 返回一个检查结果对象,可以进行自定义的数据检查。
+ Returns a check result object that allows you to perform custom data checks. +
+ 检查的委托方法 + 如果检查成功,则返回对象本身,如果失败,返回错误信息。 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。 + + 泛型参数 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 + + + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 泛型参数八 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 泛型参数八 + 泛型参数九 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 泛型参数八 + 泛型参数九 + 泛型参数十 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 操作结果的泛型类,允许带五个用户自定义的泛型对象,推荐使用这个类 + + 泛型类 + 泛型类 + 泛型类 + 泛型类 + 泛型类 + + + + 实例化一个默认的结果对象 + + + + + 使用指定的消息实例化一个默认的结果对象 + + 错误消息 + + + + 使用错误代码,消息文本来实例化对象 + + 错误代码 + 错误消息 + + + + 用户自定义的泛型数据1 + + + + + 用户自定义的泛型数据2 + + + + + 用户自定义的泛型数据3 + + + + + 用户自定义的泛型数据4 + + + + + 用户自定义的泛型数据5 + + + + + 返回一个检查结果对象,可以进行自定义的数据检查。
+ Returns a check result object that allows you to perform custom data checks. +
+ 检查的委托方法 + 检查失败的错误消息 + 如果检查成功,则返回对象本身,如果失败,返回错误信息。 +
+ + + 返回一个检查结果对象,可以进行自定义的数据检查。
+ Returns a check result object that allows you to perform custom data checks. +
+ 检查的委托方法 + 如果检查成功,则返回对象本身,如果失败,返回错误信息。 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。 + + 泛型参数 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 + + + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 泛型参数八 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 泛型参数八 + 泛型参数九 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 泛型参数八 + 泛型参数九 + 泛型参数十 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 操作结果的泛型类,允许带六个用户自定义的泛型对象,推荐使用这个类 + + 泛型类 + 泛型类 + 泛型类 + 泛型类 + 泛型类 + 泛型类 + + + + 实例化一个默认的结果对象 + + + + + 使用指定的消息实例化一个默认的结果对象 + + 错误消息 + + + + 使用错误代码,消息文本来实例化对象 + + 错误代码 + 错误消息 + + + + 用户自定义的泛型数据1 + + + + + 用户自定义的泛型数据2 + + + + + 用户自定义的泛型数据3 + + + + + 用户自定义的泛型数据4 + + + + + 用户自定义的泛型数据5 + + + + + 用户自定义的泛型数据5 + + + + + 返回一个检查结果对象,可以进行自定义的数据检查。
+ Returns a check result object that allows you to perform custom data checks. +
+ 检查的委托方法 + 检查失败的错误消息 + 如果检查成功,则返回对象本身,如果失败,返回错误信息。 +
+ + + 返回一个检查结果对象,可以进行自定义的数据检查。
+ Returns a check result object that allows you to perform custom data checks. +
+ 检查的委托方法 + 如果检查成功,则返回对象本身,如果失败,返回错误信息。 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。 + + 泛型参数 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 + + + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 泛型参数八 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 泛型参数八 + 泛型参数九 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 泛型参数八 + 泛型参数九 + 泛型参数十 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 操作结果的泛型类,允许带七个用户自定义的泛型对象,推荐使用这个类 + + 泛型类 + 泛型类 + 泛型类 + 泛型类 + 泛型类 + 泛型类 + 泛型类 + + + + 实例化一个默认的结果对象 + + + + + 使用指定的消息实例化一个默认的结果对象 + + 错误消息 + + + + 使用错误代码,消息文本来实例化对象 + + 错误代码 + 错误消息 + + + + 用户自定义的泛型数据1 + + + + + 用户自定义的泛型数据2 + + + + + 用户自定义的泛型数据3 + + + + + 用户自定义的泛型数据4 + + + + + 用户自定义的泛型数据5 + + + + + 用户自定义的泛型数据6 + + + + + 用户自定义的泛型数据7 + + + + + 返回一个检查结果对象,可以进行自定义的数据检查。
+ Returns a check result object that allows you to perform custom data checks. +
+ 检查的委托方法 + 检查失败的错误消息 + 如果检查成功,则返回对象本身,如果失败,返回错误信息。 +
+ + + 返回一个检查结果对象,可以进行自定义的数据检查。
+ Returns a check result object that allows you to perform custom data checks. +
+ 检查的委托方法 + 如果检查成功,则返回对象本身,如果失败,返回错误信息。 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。 + + 泛型参数 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 + + + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 泛型参数八 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 泛型参数八 + 泛型参数九 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 泛型参数八 + 泛型参数九 + 泛型参数十 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 操作结果的泛型类,允许带八个用户自定义的泛型对象,推荐使用这个类 + + 泛型类 + 泛型类 + 泛型类 + 泛型类 + 泛型类 + 泛型类 + 泛型类 + 泛型类 + + + + 实例化一个默认的结果对象 + + + + + 使用指定的消息实例化一个默认的结果对象 + + 错误消息 + + + + 使用错误代码,消息文本来实例化对象 + + 错误代码 + 错误消息 + + + + 用户自定义的泛型数据1 + + + + + 用户自定义的泛型数据2 + + + + + 用户自定义的泛型数据3 + + + + + 用户自定义的泛型数据4 + + + + + 用户自定义的泛型数据5 + + + + + 用户自定义的泛型数据6 + + + + + 用户自定义的泛型数据7 + + + + + 用户自定义的泛型数据8 + + + + + 返回一个检查结果对象,可以进行自定义的数据检查。
+ Returns a check result object that allows you to perform custom data checks. +
+ 检查的委托方法 + 检查失败的错误消息 + 如果检查成功,则返回对象本身,如果失败,返回错误信息。 +
+ + + 返回一个检查结果对象,可以进行自定义的数据检查。
+ Returns a check result object that allows you to perform custom data checks. +
+ 检查的委托方法 + 如果检查成功,则返回对象本身,如果失败,返回错误信息。 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。 + + 泛型参数 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 + + + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 泛型参数八 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 泛型参数八 + 泛型参数九 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 泛型参数八 + 泛型参数九 + 泛型参数十 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 操作结果的泛型类,允许带九个用户自定义的泛型对象,推荐使用这个类 + + 泛型类 + 泛型类 + 泛型类 + 泛型类 + 泛型类 + 泛型类 + 泛型类 + 泛型类 + 泛型类 + + + + 实例化一个默认的结果对象 + + + + + 使用指定的消息实例化一个默认的结果对象 + + 错误消息 + + + + 使用错误代码,消息文本来实例化对象 + + 错误代码 + 错误消息 + + + + 用户自定义的泛型数据1 + + + + + 用户自定义的泛型数据2 + + + + + 用户自定义的泛型数据3 + + + + + 用户自定义的泛型数据4 + + + + + 用户自定义的泛型数据5 + + + + + 用户自定义的泛型数据6 + + + + + 用户自定义的泛型数据7 + + + + + 用户自定义的泛型数据8 + + + + + 用户自定义的泛型数据9 + + + + + 返回一个检查结果对象,可以进行自定义的数据检查。
+ Returns a check result object that allows you to perform custom data checks. +
+ 检查的委托方法 + 检查失败的错误消息 + 如果检查成功,则返回对象本身,如果失败,返回错误信息。 +
+ + + 返回一个检查结果对象,可以进行自定义的数据检查。
+ Returns a check result object that allows you to perform custom data checks. +
+ 检查的委托方法 + 如果检查成功,则返回对象本身,如果失败,返回错误信息。 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。 + + 泛型参数 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 + + + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 泛型参数八 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 泛型参数八 + 泛型参数九 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 泛型参数八 + 泛型参数九 + 泛型参数十 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 操作结果的泛型类,允许带十个用户自定义的泛型对象,推荐使用这个类 + + 泛型类 + 泛型类 + 泛型类 + 泛型类 + 泛型类 + 泛型类 + 泛型类 + 泛型类 + 泛型类 + 泛型类 + + + + 实例化一个默认的结果对象 + + + + + 使用指定的消息实例化一个默认的结果对象 + + 错误消息 + + + + 使用错误代码,消息文本来实例化对象 + + 错误代码 + 错误消息 + + + + 用户自定义的泛型数据1 + + + + + 用户自定义的泛型数据2 + + + + + 用户自定义的泛型数据3 + + + + + 用户自定义的泛型数据4 + + + + + 用户自定义的泛型数据5 + + + + + 用户自定义的泛型数据6 + + + + + 用户自定义的泛型数据7 + + + + + 用户自定义的泛型数据8 + + + + + 用户自定义的泛型数据9 + + + + + 用户自定义的泛型数据10 + + + + + 返回一个检查结果对象,可以进行自定义的数据检查。
+ Returns a check result object that allows you to perform custom data checks. +
+ 检查的委托方法 + 检查失败的错误消息 + 如果检查成功,则返回对象本身,如果失败,返回错误信息。 +
+ + + 返回一个检查结果对象,可以进行自定义的数据检查。
+ Returns a check result object that allows you to perform custom data checks. +
+ 检查的委托方法 + 如果检查成功,则返回对象本身,如果失败,返回错误信息。 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。 + + 泛型参数 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 + + + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 泛型参数八 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 泛型参数八 + 泛型参数九 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 指定接下来要做的是内容,当前对象如果成功,就返回接下来的执行结果,如果失败,就返回当前对象本身。
+ Specify what you want to do next, return the result of the execution of the current object if it succeeds, and return the current object itself if it fails. +
+ 泛型参数一 + 泛型参数二 + 泛型参数三 + 泛型参数四 + 泛型参数五 + 泛型参数六 + 泛型参数七 + 泛型参数八 + 泛型参数九 + 泛型参数十 + 等待当前对象成功后执行的内容 + 返回整个方法链最终的成功失败结果 +
+ + + 南京自动化研究所的DCS系统,基于modbus实现,但是不是标准的实现 + + + + + 实例化一个默认的对象
+ Instantiate a default object +
+
+ + + + + + + + + + + + + + + + + + + + + DTU的服务器信息,本服务器支持任意的hsl支持的网络对象,包括plc信息,modbus设备等等,通过DTU来连接, + 然后支持多个连接对象。如果需要支持非hsl的注册报文,需要重写相关的方法
+ DTU server information, the server supports any network objects supported by hsl, + including plc information, modbus devices, etc., connected through DTU, and then supports multiple connection objects. + If you need to support non-HSL registration messages, you need to rewrite the relevant methods +
+ + 针对异形客户端进行扩展信息 + +
+ + + 根据配置的列表信息来实例化相关的DTU服务器
+ Instantiate the relevant DTU server according to the configured list information +
+ DTU的配置信息 +
+ + + 根据配置的列表信息来实例化相关的DTU服务器
+ Instantiate the relevant DTU server according to the configured list information +
+ Dtu信息 + 设备信息 +
+ + + + + + + + + 根据DTU信息获取设备的连接对象
+ Obtain the connection object of the device according to the DTU information +
+ 设备的id信息 + 设备的对象 +
+ + + 获取所有的会话信息,是否在线,上线的基本信息
+ Get all the session information, whether it is online, online basic information +
+ 会话列表 +
+ + + 获取所有的设备的信息,可以用来读写设备的数据信息
+ Get all device information, can be used to read and write device data information +
+ 设备数组 +
+ + + + + + DTU的类型设置器 + + + + + 设备的唯一ID信息 + + + + + 当前的设备的类型 + + + + + 额外的参数都存放在json里面 + + + + + + + + 根据类型,获取连接对象 + + 获取设备的连接对象 + + + + 一个基于异步高性能的客户端网络类,支持主动接收服务器的消息 + + + 详细的使用说明,请参照博客http://www.cnblogs.com/dathlin/p/7697782.html + + + 此处贴上了Demo项目的服务器配置的示例代码 + + + + + + 实例化一个对象 + + + + + 客户端系统是否启动 + + + + + 重连接失败的次数 + + + + + 客户端登录的标识名称,可以为ID号,也可以为登录名 + + + + + 远程服务器的IP地址和端口 + + + + + 服务器的时间,自动实现和服务器同步 + + + + + 系统与服务器的延时时间,单位毫秒 + + + + + 客户端启动成功的事件,重连成功也将触发此事件 + + + + + 连接失败时触发的事件 + + + + + 服务器的异常,启动,等等一般消息产生的时候,出发此事件 + + + + + 在客户端断开后并在重连服务器之前触发,用于清理系统资源 + + + + + 当接收到文本数据的时候,触发此事件 + + + + + 当接收到字节数据的时候,触发此事件 + + + + + 关闭该客户端引擎 + + + + + 启动客户端引擎,连接服务器系统 + + + + + 连接服务器之前的消息提示,如果是重连的话,就提示10秒等待信息 + + + + + 服务器端用于数据发送文本的方法 + + 用户自定义的命令头 + 发送的文本 + + + + 服务器端用于发送字节的方法 + + 用户自定义的命令头 + 实际发送的数据 + + + + 心跳线程的方法 + + + + + + + + 高性能的异步网络服务器类,适合搭建局域网聊天程序,消息推送程序 + + + 详细的使用说明,请参照博客http://www.cnblogs.com/dathlin/p/8097897.html + + + 此处贴上了Demo项目的服务器配置的示例代码 + + + + + + 实例化一个网络服务器类对象 + + + + + 所支持的同时在线客户端的最大数量,默认为10000个 + + + + + 获取或设置服务器是否记录客户端上下线信息,默认为true + + + + + 所有在线客户端的数量 + + + + + 初始化操作 + + + + + 关闭网络时的操作 + + + + + 让客户端正常下线,调用本方法即可自由控制会话客户端强制下线操作。 + + 会话对象 + + + + 客户端的上下限状态变更时触发,仅作为在线客户端识别 + + + + + 当客户端上线的时候,触发此事件 + + + + + 当客户端下线的时候,触发此事件 + + + + + 当接收到文本数据的时候,触发此事件 + + + + + 当接收到字节数据的时候,触发此事件 + + + + + 当接收到了新的请求的时候执行的操作 + + 异步对象 + 终结点 + + + + 服务器端用于数据发送文本的方法 + + 数据发送对象 + 用户自定义的数据对象,如不需要,赋值为0 + 发送的文本 + + + + 服务器端用于发送字节的方法 + + 数据发送对象 + 用户自定义的数据对象,如不需要,赋值为0 + 实际发送的数据 + + + + 服务端用于发送所有数据到所有的客户端 + + 用户自定义的命令头 + 需要传送的实际的数据 + + + + 服务端用于发送所有数据到所有的客户端 + + 用户自定义的命令头 + 需要群发客户端的字节数据 + + + + 根据客户端设置的别名进行发送消息 + + 客户端上线的别名 + 用户自定义的命令头 + 需要传送的实际的数据 + + + + 根据客户端设置的别名进行发送消息 + + 客户端上线的别名 + 用户自定义的命令头 + 需要传送的实际的数据 + + + + + + + 通用设备的基础网络信息 + + + + + 实例化一个通用的设备类 + + + + + 当客户端上线的时候,触发此事件 + + + + + 当客户端下线的时候,触发此事件 + + + + + 按照ASCII文本的方式进行触发接收的数据 + + + + + 按照字节的方式进行触发接收的数据 + + + + + 当接收到了新的请求的时候执行的操作 + + 异步对象 + 终结点 + + + + 通用设备的基础状态 + + + + + 设备的连接地址 + + + + + 设备的连接时间 + + + + + 网络套接字 + + + + + 上次接收到信息的时间 + + + + + 设备的ip地址 + + + + + 缓冲内存块 + + + + + 文件管理类服务器,负责服务器所有分类文件的管理,特点是不支持文件附加数据,但是支持直接访问文件名 + + + 本文件的服务器不支持存储文件携带的额外信息,是直接将文件存放在服务器指定目录下的,文件名不更改,特点是服务器查看方便。 + + + 以下的示例来自Demo项目,创建了一个简单的服务器对象。 + + + + + + 实例化一个对象 + + + + + + + + + + + + + + 从网络套接字接收文件并移动到目标的文件夹中,如果结果异常,则结束通讯 + + + + + + + + + + + + 用于接收上传文件时的临时文件夹,临时文件使用结束后会被删除
+ Used to receive the temporary folder when uploading files. The temporary files will be deleted after use +
+
+ + + + + + 文件传输客户端基类,提供上传,下载,删除的基础服务
+ File transfer client base class, providing basic services for uploading, downloading, and deleting +
+
+ + + 文件管理服务器的ip地址及端口
+ IP address and port of the file management server +
+
+ + + 获取或设置连接的超时时间,默认10秒
+ Gets or sets the connection timeout time. The default is 10 seconds. +
+
+ + + 发送三个文件分类信息到服务器端,方便后续开展其他的操作。
+ Send the three file classification information to the server to facilitate subsequent operations. +
+ 套接字对象 + 一级分类 + 二级分类 + 三级分类 + 是否成功的结果对象 +
+ + + + + + 删除服务器上的文件,需要传入文件信息,以及文件绑定的分类信息。
+ To delete a file on the server, you need to pass in the file information and the classification information of the file binding. +
+ 文件的名称 + 一级分类 + 二级分类 + 三级分类 + 是否成功的结果对象 +
+ + + 删除服务器上的文件列表,需要传入文件信息,以及文件绑定的分类信息。
+ To delete a file on the server, you need to pass in the file information and the classification information of the file binding. +
+ 所有等待删除的文件的名称 + 一级分类 + 二级分类 + 三级分类 + 是否成功的结果对象 +
+ + + 删除服务器上的指定目录的所有文件,需要传入分类信息。
+ To delete all files in the specified directory on the server, you need to input classification information +
+ 一级分类 + 二级分类 + 三级分类 + 是否成功的结果对象 +
+ + + 删除服务器上的指定目录的所有空文件目录,需要传入分类信息。
+ Delete all the empty file directories in the specified directory on the server, need to input classification information +
+ 一级分类 + 二级分类 + 三级分类 + 是否成功的结果对象 +
+ + + + + + + + + + + + + + + 下载服务器的文件数据,并且存储到对应的内容里去。
+ Download the file data of the server and store it in the corresponding content. +
+ 一级分类 + 二级分类 + 三级分类 + 服务器的文件名称 + 下载的进度报告,第一个数据是已完成总接字节数,第二个数据是总字节数。 + 数据源信息,决定最终存储到哪里去 + 是否成功的结果对象 +
+ + + + + + 上传文件给服务器,需要指定上传的数据内容,上传到服务器的分类信息,支持进度汇报功能。
+ To upload files to the server, you need to specify the content of the uploaded data, + the classification information uploaded to the server, and support the progress report function. +
+ 数据源,可以是文件名,也可以是数据流 + 在服务器保存的文件名,不包含驱动器路径 + 一级分类 + 二级分类 + 三级分类 + 文件的描述 + 文件的上传人 + 汇报进度,第一个数据是已完成总接字节数,第二个数据是总字节数。 + 是否成功的结果对象 +
+ + + + + + + + + 与服务器文件引擎交互的客户端类,支持操作Advanced引擎和Ultimate引擎,用来上传,下载,删除服务器中的文件操作。
+ The client class that interacts with the server file engine, supports the operation of the Advanced engine and the Ultimate engine, + and is used to upload, download, and delete file operations on the server. +
+ + 这里需要需要的是,本客户端支持Advanced引擎和Ultimate引擎文件服务器,服务的类型需要您根据自己的需求来选择。 + 需要注意的是,三个分类信息,factory, group, id 的字符串是不区分大小写的。 + + + 此处只演示创建实例,具体的上传,下载,删除的例子请参照对应的方法 + + +
+ + + 实例化一个默认的对象,需要提前指定服务器的远程地址
+ Instantiate a default object, you need to specify the remote address of the server in advance +
+
+ + + 通过指定的Ip地址及端口号实例化一个对象
+ Instantiate an object with the specified IP address and port number +
+ 服务器的ip地址 + 端口号信息 +
+ + + + + + 删除服务器的文件操作,需要指定文件名称,文件的三级分类信息
+ Delete the file operation of the server, you need to specify the file name and the three-level classification information of the file +
+ 文件名称,带后缀 + 第一大类 + 第二大类 + 第三大类 + 是否成功的结果对象 +
+ + + 删除服务器的文件操作,此处文件的分类为空
+ Delete the file operation of the server, the classification of the file is empty here +
+ 文件名称,带后缀 + 是否成功的结果对象 +
+ + + 删除服务器的文件数组操作,需要指定文件名称,文件的三级分类信息
+ Delete the file operation of the server, you need to specify the file names and the three-level classification information of the file +
+ 文件名称数组,带后缀 + 第一大类 + 第二大类 + 第三大类 + 是否成功的结果对象 +
+ + + 删除服务器的文件夹的所有文件操作,文件的三级分类信息
+ Delete all file operations of the server folder, the three-level classification information of the file +
+ 第一大类 + 第二大类 + 第三大类 + 是否成功的结果对象 +
+ + + 删除服务器的文件夹的所有空的子文件目录操作,需要传入文件的三级分类信息
+ To delete all empty sub-file directories of the server's folder, you need to pass in the three-level classification information of the file +
+ 第一大类 + 第二大类 + 第三大类 + 是否成功的结果对象 +
+ + + 获取服务器文件夹的指定目录的文件统计信息,包括文件数量,总大小,最后更新时间
+ Get the file statistics of the specified directory of the server folder, including the number of files, the total size, and the last update time +
+ 第一大类 + 第二大类 + 第三大类 + 返回路径的信息,包含文件大小,数量,最后更新时间 +
+ + + 获取服务器文件夹的指定目录的所有子目录的文件信息,包括每个子目录的文件数量,总大小,最后更新时间
+ Get the file information of all subdirectories of the specified directory of the server folder, including the number of files in each subdirectory, the total size, and the last update time +
+ 第一大类 + 第二大类 + 第三大类 + 返回路径的信息,包含文件大小,数量,最后更新时间 +
+ + + + + + + + + + + + + + + + + + + + + + + + 下载服务器的文件到本地的文件操作,需要指定下载的文件的名字,三级分类信息,本次保存的文件名,支持进度报告。
+ To download a file from the server to a local file, you need to specify the name of the downloaded file, + the three-level classification information, the name of the file saved this time, and support for progress reports. +
+ 文件名称,带后缀 + 第一大类 + 第二大类 + 第三大类 + 下载的进度报告,第一个数据是已完成总接字节数,第二个数据是总字节数。 + 准备本地保存的名称 + 是否成功的结果对象 + + 用于分类的参数中间不需要的可以为空,对应的是服务器上的路径系统。 +

+ + 失败的原因大多数来自于网络的接收异常,或是服务器不存在文件。 + +
+ + + +
+ + + + + + + + + + + + + + + + + + 上传本地的文件到服务器操作,如果该文件已经存在,那么就更新这个文件。
+ Upload a local file to the server. If the file already exists, update the file. +
+ 本地的完整路径的文件名称 + 服务器存储的文件名称,带后缀,例如123.txt + 第一大类 + 第二大类 + 第三大类 + 文件的额外描述 + 文件的上传人 + 上传的进度报告 + 是否成功的结果对象 + + 用于分类的参数中间不需要的可以为空,对应的是服务器上的路径系统。 +

+ + 失败的原因大多数来自于网络的接收异常,或是客户端不存在文件。 + +
+ + + +
+ + + 上传本地的文件到服务器操作,服务器存储的文件名就是当前文件默认的名称 + + 本地的完整路径的文件名称 + 第一大类 + 第二大类 + 第三大类 + 文件的额外描述 + 文件的上传人 + 上传的进度报告 + 是否成功的结果对象 + + + + 上传本地的文件到服务器操作,服务器存储的文件名就是当前文件默认的名称 + + 本地的完整路径的文件名称 + 第一大类 + 第二大类 + 第三大类 + 上传的进度报告 + 是否成功的结果对象 + + + + 上传本地的文件到服务器操作,服务器存储的文件名就是当前文件默认的名称,其余参数默认为空 + + 本地的完整路径的文件名称 + 上传的进度报告 + 是否成功的结果对象 + + + + 上传数据流到服务器操作 + + 数据流内容 + 服务器存储的文件名称,带后缀 + 第一大类 + 第二大类 + 第三大类 + 文件的额外描述 + 文件的上传人 + 上传的进度报告 + 是否成功的结果对象 + + 用于分类的参数中间不需要的可以为空,对应的是服务器上的路径系统。 +

+ + 失败的原因大多数来自于网络的接收异常,或是客户端不存在文件。 + +
+ + + +
+ + + 上传内存图片到服务器操作 + + 内存图片,不能为空 + 服务器存储的文件名称,带后缀 + 第一大类 + 第二大类 + 第三大类 + 文件的额外描述 + 文件的上传人 + 上传的进度报告 + 是否成功的结果对象 + + + 用于分类的参数中间不需要的可以为空,对应的是服务器上的路径系统。 +

+ + 失败的原因大多数来自于网络的接收异常,或是客户端不存在文件。 + +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + 获取指定路径下的所有的文档
+ Get all documents in the specified path +
+ 第一大类 + 第二大类 + 第三大类 + 是否成功的结果对象 + + 用于分类的参数中间不需要的可以为空,对应的是服务器上的路径系统。 +

+ + 失败的原因大多数来自于网络的接收异常。 + +
+ + + +
+ + + + + + 获取指定路径下的所有的目录
+ Get all directories under the specified path +
+ 第一大类 + 第二大类 + 第三大类 + 是否成功的结果对象 + + 用于分类的参数中间不需要的可以为空,对应的是服务器上的路径系统。 +

+ + 失败的原因大多数来自于网络的接收异常。 + +
+ + + +
+ + + + + + 检查当前的文件是否在服务器端存在,列表中需要存在文件的名称,映射的文件也需要存在。
+ Check whether the current file exists on the server side, the name of the file must exist in the list, and the mapped file must also exist. +
+ 当前的文件名称,举例123.txt + 第一级分类信息 + 第二级分类信息 + 第三级分类信息 + 是否存在,存在返回true, 否则,返回false +
+ + + + + + 获取指定路径下的所有的路径或是文档信息 + + 指令 + 第一大类 + 第二大类 + 第三大类 + 数组的类型 + 是否成功的结果对象 + + + + + + + + + + 一个终极文件管理服务器,可以实现对所有的文件分类管理,本服务器支持读写分离,支持同名文件, + 客户端使用进行访问,支持上传,下载,删除,请求文件列表,校验文件是否存在操作。
+ An ultimate file management server, which can realize classified management of all files. This server supports read-write separation, + supports files with the same name, and the client uses to access, + supports upload, download, delete, and request files List, check whether the file exists operation. +
+ + 本文件的服务器支持存储文件携带上传人的信息,备注信息,文件名被映射成了新的名称,无法在服务器直接查看文件信息。 + + + 以下的示例来自Demo项目,创建了一个简单的服务器对象。 + + +
+ + + 实例化一个默认的对象
+ Instantiate a default object +
+
+ + + 获取当前的针对文件夹的文件管理容器的数量
+ Get the current number of file management containers for the folder +
+
+ + + 所有文件组操作的词典锁 + + + + + 词典的锁 + + + + + 获取当前目录的文件列表管理容器,如果没有会自动创建,通过该容器可以实现对当前目录的文件进行访问
+ Get the file list management container of the current directory. If not, it will be created automatically. + Through this container, you can access files in the current directory. +
+ 路径信息 + 文件管理容器信息 +
+ + + 清除系统中所有空的路径信息 + + + + + 从套接字接收文件并保存,更新文件列表 + + 套接字 + 保存的文件名 + 是否成功的结果对象 + + + + 从套接字接收文件并保存,更新文件列表 + + 套接字 + 保存的文件名 + 是否成功的结果对象 + + + + 根据文件的显示名称转化为真实存储的名称,例如 123.txt 获取到在文件服务器里映射的文件名称,例如返回 b35a11ec533147ca80c7f7d1713f015b7909 + + 第一大类 + 第二大类 + 第三大类 + 文件显示名称 + 是否成功的结果对象 + + + + 删除已经存在的文件信息,文件的名称需要是guid名称,例如 b35a11ec533147ca80c7f7d1713f015b7909 + + 文件的路径 + 文件的guid名称,例如 b35a11ec533147ca80c7f7d1713f015b7909 + + + + 删除已经存在的文件信息,文件的名称需要是guid名称,例如 b35a11ec533147ca80c7f7d1713f015b7909 + + 文件的路径 + 文件的guid名称,例如 b35a11ec533147ca80c7f7d1713f015b7909 + + + + + + + + + + 一个支持完全自定义的Http服务器,支持返回任意的数据信息,方便调试信息,详细的案例请查看API文档信息
+ A Http server that supports fully customized, supports returning arbitrary data information, which is convenient for debugging information. For detailed cases, please refer to the API documentation information +
+ + 使用RPC接口注册的方式,可以更加便捷快速的实现webapi接口创建及设计,自带接口列表浏览查看,注释查看,签名查看,甚至调用次数及耗时查看。
+ Using the RPC interface registration method, you can more conveniently and quickly realize the creation and design of webapi interfaces, browse and view the built-in interface list, + view comments, view signatures, and even view the number of calls and time-consuming. +
+ + 我们先来看看一个最简单的例子,如何进行实例化的操作。 + + 通常来说,基本的实例化,返回固定的数据并不能满足我们的需求,我们需要返回自定义的数据,有一个委托,我们需要自己指定方法. + + 我们实际的需求可能会更加的复杂,不同的网址会返回不同的数据,所以接下来我们需要对网址信息进行判断。 + + 如果我们想增加安全性的验证功能,比如我们的api接口需要增加用户名和密码的功能,那么我们也可以实现 + + 当然了,如果我们想反回一个完整的html网页,也是可以实现的,甚至添加一些js的脚本,下面的例子就简单的说明了如何操作 + + 如果需要实现跨域的操作,可以将属性 设置为True

+ 上述的代码编写接口还是很费劲的,接口的方法还不能在服务器复用,所以参考下面的代码来编写接口会更加的高级和便捷。 + +
+
+ + + 实例化一个默认的对象,当前的运行,需要使用管理员的模式运行
+ Instantiate a default object, the current operation, you need to use the administrator mode to run +
+
+ + + 启动服务器,正常调用该方法时,应该使用try...catch...来捕获错误信息
+ Start the server and use try...catch... to capture the error message when calling this method normally +
+ 端口号信息 + + +
+ + + 关闭服务器
+ Shut down the server +
+
+ + + 根据客户端的请求进行处理的核心方法,可以返回自定义的数据内容,只需要集成重写即可。
+ The core method of processing according to the client's request can return custom data content, and only needs to be integrated and rewritten. +
+ 请求 + 回应 + Body数据 + 返回的内容 +
+ + + 额外的处理请求信息的委托定义,将可以自定义处理一些特殊的请求头数据,例如一些账户相关的其他属性,语言属性等等。
+ Additional delegate definitions for processing request information will be able to customize some special request header data, + such as some other account-related attributes, language attributes, and so on. +
+
+ + + 获取当前的日志统计信息,可以获取到每个API的每天的调度次数信息,缓存60天数据,如果需要存储本地,需要调用方法。
+ Get the current log statistics, you can get the daily scheduling times information of each API, and cache 60-day data. + If you need to store it locally, you need to call the method. +
+
+ + + + + + 获取或设置当前服务器的编码信息,默认为UTF8编码
+ Get or set the encoding information of the current server, the default is UTF8 encoding +
+
+ + + 获取或设置是否支持跨域操作
+ Get or set whether to support cross-domain operations +
+
+ + + 获取或设置当前的自定义的处理信息,如果不想继承实现方法,可以使用本属性来关联你自定义的方法。
+ Get or set the current custom processing information. If you don't want to inherit the implementation method, you can use this attribute to associate your custom method. +
+
+ + + 获取或设置当前的自定义处理文件上传的信息,自动解析好文件的基本信息 + + + + + 获取当前的端口号信息
+ Get current port number information +
+
+ + + 获取当前所有注册的RPC接口信息,将返回一个数据列表。
+ Get all currently registered RPC interface information, and a data list will be returned. +
+ 信息列表 +
+ + + 注册一个RPC的服务接口,可以指定当前的控制器名称,以及提供RPC服务的原始对象
+ Register an RPC service interface, you can specify the current controller name, + and the original object that provides the RPC service +
+ 前置的接口信息,可以理解为MVC模式的控制器 + 原始对象信息 +
+ + + + + + 设置登录的账户信息,如果需要自己控制,可以自己实现委托
+ Set the login account information, if you need to control by yourself, you can implement the delegation by yourself +
+ 用户名的列表信息 +
+ + + + + + 使用指定的对象来返回网络的API接口,前提是传入的数据为json参数,返回的数据为json数据,详细参照说明
+ Use the specified object to return the API interface of the network, + provided that the incoming data is json parameters and the returned data is json data, + please refer to the description for details +
+ 当前的请求信息 + 已经解码过的Url地址信息 + json格式的参数信息 + 等待解析的api解析的对象 + 额外的解析Request参数的方法 + 等待返回客户的结果 +
+ + + 根据完整的地址获取当前的url地址信息 + + 地址信息 + 方法名称 + + + + 使用指定的对象来返回网络的API接口,前提是传入的数据为json参数,返回的数据为json数据,详细参照说明
+ Use the specified object to return the API interface of the network, + provided that the incoming data is json parameters and the returned data is json data, + please refer to the description for details +
+ 当前的请求信息 + 已经解码过的Url地址信息 + json格式的参数信息 + 等待解析的api解析的对象 + 额外的解析Request参数的方法 + 等待返回客户的结果 +
+ + + 获取或设置Http模式下上传的文件信息 + + + + + 获取或设置文本的名称 + + + + + 获取或设置用户设置的名称 + + + + + 获取或设置文件的内容 + + + + + 一个基于明文的socket中心 + + + + + 实例化一个默认的对象 + + + + + 使用指定的ip地址和端口号来实例化这个对象 + + Ip地址 + 端口号 + + + + 连接服务器 + + 返回是否连接成功 + + + + 关闭当前的连接对象 + + 错误信息 + + + + 发送字符串到网络上去 + + 文本信息 + 发送是否成功 + + + + 是否是处于重连的状态 + + 无用的对象 + + + + 当接收到字符串时候的触发事件 + + + + + 当前的编码器 + + + + + 返回表示当前对象的字符串 + + 字符串 + + + + 当前的推送的会话的基本信息 + + + + + 发布订阅类的客户端,使用指定的关键订阅相关的数据推送信息 + + + 详细的使用说明,请参照博客http://www.cnblogs.com/dathlin/p/8992315.html + + + 此处贴上了Demo项目的服务器配置的示例代码 + + + + + + 实例化一个发布订阅类的客户端,需要指定ip地址,端口,及订阅关键字 + + 服务器的IP地址 + 服务器的端口号 + 订阅关键字 + + + + 创建数据推送服务 + + 触发数据推送的委托 + 是否创建成功 + + + + 创建数据推送服务,使用事件绑定的机制实现 + + 是否创建成功 + + + + 关闭消息推送的界面 + + + + + 本客户端的关键字 + + + + + 获取或设置重连服务器的间隔时间,单位:毫秒 + + + + + 当接收到数据的事件信息,接收到数据的时候触发。 + + + + + + + + 发布订阅服务器的类,支持按照关键字进行数据信息的订阅 + + + 详细的使用说明,请参照博客http://www.cnblogs.com/dathlin/p/8992315.html + + + 此处贴上了Demo项目的服务器配置的示例代码 + + + + + + 实例化一个对象 + + + + + + + + + + + 主动推送数据内容 + + 关键字 + 数据内容 + + + + 移除关键字信息,通常应用于一些特殊临时用途的关键字 + + 关键字 + + + + 创建一个远程服务器的数据推送操作,以便推送给子客户端 + + 远程的IP地址 + 远程的端口号 + 订阅的关键字 + + + + 在线客户端的数量 + + + + + 在客户端上线之后,是否推送缓存的数据,默认设置为true + + + + + 移除客户端的数据信息 + + 指定的客户端 + 指定的客户端唯一的id信息 + + + + + + + 订阅分类的核心组织对象 + + + + + 实例化一个默认的对象 + + + + + 新增一个订阅的会话 + + 会话 + + + + 移除一个订阅的会话 + + 客户端唯一的ID信息 + + + + 使用固定的发送方法将数据发送出去 + + 数据内容 + 指定的推送方法 + + + + 移除并关闭所有的客户端 + + + + + 获取是否推送过数据 + + True代表有,False代表没有 + + + + 释放当前的程序所占用的资源 + + 是否释放资源 + + + + 释放当前的对象所占用的资源 + + + + + + + + 关于Redis实现的接口,从而实现了数据连接池的操作信息 + + + + + + + + + + + + + + Redis的连接对象 + + + + + + + + + + + [商业授权] Redis客户端的连接池类对象,用于共享当前的连接池,合理的动态调整连接对象,然后进行高效通信的操作,默认连接数无限大。
+ [Authorization] The connection pool class object of the Redis client is used to share the current connection pool, + reasonably dynamically adjust the connection object, and then perform efficient communication operations, + The default number of connections is unlimited +
+ + 本连接池的实现仅对商业授权用户开放,用于提供服务器端的与Redis的并发读写能力。使用上和普通的 没有区别, + 但是在高并发上却高性能的多,占用的连接也更少,这一切都是连接池自动实现的。 + +
+ + + 实例化一个默认的客户端连接池对象,需要指定实例Redis对象时的IP,端口,密码信息
+ To instantiate a default client connection pool object, you need to specify the IP, port, and password information when the Redis object is instantiated +
+ IP地址信息 + 端口号信息 + 密码,如果没有,请输入空字符串 +
+ + + 实例化一个默认的客户端连接池对象,需要指定实例Redis对象时的IP,端口,密码信息,以及可以指定额外的初始化操作
+ To instantiate a default client connection pool object, you need to specify the IP, port, + and password information when the Redis object is instantiated, and you can specify additional initialization operations +
+ IP地址信息 + 端口号信息 + 密码,如果没有,请输入空字符串 + 额外的初始化信息,比如修改db块的信息。 +
+ + + 获取当前的连接池管理对象信息
+ Get current connection pool management object information +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 提供了redis辅助类的一些方法 + + + + + 将字符串数组打包成一个redis的报文信息 + + 字节数据信息 + 结果报文信息 + + + + 生成一个订阅多个主题的报文信息 + + 多个的主题信息 + 结果报文信息 + + + + 生成一个取消订阅多个主题的报文信息 + + 多个的主题信息 + 结果报文信息 + + + + 从原始的结果数据对象中提取出数字数据 + + 原始的字节数据 + 带有结果对象的数据信息 + + + + 从原始的结果数据对象中提取出数字数据 + + 原始的字节数据 + 带有结果对象的数据信息 + + + + 从结果的数据对象里提取字符串的信息 + + 原始的字节数据 + 带有结果对象的数据信息 + + + + 从redis的结果数据中分析出所有的字符串信息 + + 结果数据 + 带有结果对象的数据信息 + + + + Redis协议的订阅操作,一个对象订阅一个或是多个频道的信息,当发生网络异常的时候,内部会进行自动重连,并恢复之前的订阅信息。
+ In the subscription operation of the Redis protocol, an object subscribes to the information of one or more channels. + When a network abnormality occurs, the internal will automatically reconnect and restore the previous subscription information. +
+
+ + + 实例化一个发布订阅类的客户端,需要指定ip地址,端口。
+ To instantiate a publish and subscribe client, you need to specify the ip address and port. +
+ 服务器的IP地址 + 服务器的端口号 +
+ + + 实例化一个发布订阅类的客户端,需要指定ip地址,端口,及订阅关键字。
+ To instantiate a publish-subscribe client, you need to specify the ip address, port, and subscription keyword. +
+ 服务器的IP地址 + 服务器的端口号 + 订阅关键字 +
+ + + 实例化一个发布订阅类的客户端,需要指定ip地址,端口,及订阅关键字。
+ To instantiate a publish-subscribe client, you need to specify the ip address, port, and subscription keyword. +
+ 服务器的IP地址 + 服务器的端口号 + 订阅关键字 +
+ + + 如果Redis服务器设置了密码,此处就需要进行设置。必须在 方法调用前设置。
+ If the Redis server has set a password, it needs to be set here. Must be set before the method is called. +
+
+ + + 获取或设置当前连接超时时间,主要对 方法有影响,默认值为 5000,也即是5秒。
+ Get or set the current connection timeout period, which mainly affects the method. The default value is 5000, which is 5 seconds. +
+
+ + + 从Redis服务器订阅一个或多个主题信息
+ Subscribe to one or more topics from the redis server +
+ 主题信息 + 订阅结果 +
+ + + + + + 取消订阅多个主题信息,取消之后,当前的订阅数据就不在接收到。
+ Unsubscribe from multiple topic information. After cancellation, the current subscription data will not be received. +
+ 主题信息 + 取消订阅结果 +
+ + + 取消已经订阅的主题信息 + + 主题信息 + 取消订阅结果 + + + + 连接Redis的服务器,如果已经初始化了订阅的Topic信息,那么就会直接进行订阅操作。 + + 是否创建成功 + + + + 关闭消息推送的界面 + + + + + 当接收到Redis订阅的信息的时候触发
+ Triggered when receiving Redis subscription information +
+ 主题信息 + 数据信息 +
+ + + 当接收到Redis订阅的信息的时候触发 + + + + + + + + 这是一个redis的客户端类,支持读取,写入,发布订阅,但是不支持订阅,如果需要订阅,请使用另一个类 + + + 本类库的API指令的参考及注释来源:http://doc.redisfans.com/index.html + + + 基本的操作如下所示,举例了几个比较常见的指令,更多的需要参考api接口描述 + + 如下是基于特性的操作,有必要说明以下: + + 总的来说,当读取的数据种类比较多的时候,读取的关键字比较多的时候,处理起来就比较的麻烦,此处推荐一个全新的写法,为了更好的对比,我们假设实现一种需求 + + 为此我们只需要实现一个特性类即可。代码如下:(注意,实际是很灵活的,类型都是自动转换的) + + + + + + 实例化一个客户端的对象,用于和服务器通信 + + 服务器的ip地址 + 服务器的端口号 + 密码,如果服务器没有设置,密码设置为null + + + + 实例化一个客户端对象,需要手动指定Ip地址和端口 + + 密码,如果服务器没有设置,密码设置为null + + + + + + + + + + + + + + + + + + + + + + 自定义的指令交互方法,该指令用空格分割,举例:LTRIM AAAAA 0 999 就是收缩列表,GET AAA 就是获取键值,需要对返回的数据进行二次分析 + + 举例:LTRIM AAAAA 0 999 就是收缩列表,GET AAA 就是获取键值 + 从服务器返回的结果数据对象 + + + + + + + 向服务器请求指定,并返回数字的结果对象 + + 命令数组 + 数字的结果对象 + + + + 向服务器请求指令,并返回long数字的结果对象 + + 命令数组 + long数字的结果对象 + + + + 向服务器请求指令,并返回字符串的结果对象 + + 命令数组 + 字符串的结果对象 + + + + 向服务器请求指令,并返回字符串数组的结果对象 + + 命令数组 + 字符串数组的结果对象 + + + + 向服务器请求指令,并返回状态的结果对象,通常用于写入的判断,或是请求类型的判断 + + 命令数组 + 是否成功的结果对象 + + + + + + + + + + + + + + + + + + + 删除给定的一个或多个 key 。不存在的 key 会被忽略。 + + 关键字 + 被删除 key 的数量。 + + + + 删除给定的一个或多个 key 。不存在的 key 会被忽略。 + + 关键字 + 被删除 key 的数量。 + + + + 检查给定 key 是否存在。若 key 存在,返回 1 ,否则返回 0 。 + + 关键字 + 若 key 存在,返回 1 ,否则返回 0 。 + + + + 为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除。设置成功返回 1 。当 key 不存在或者不能为 key 设置生存时间时,返回 0 。 + + 关键字 + 当前key的生存时间,单位为秒 + + 设置成功返回 1 。当 key 不存在或者不能为 key 设置生存时间时,返回 0 。 + + + 在 Redis 中,带有生存时间的 key 被称为『易失的』(volatile)。
+ 生存时间可以通过使用 DEL 命令来删除整个 key 来移除,或者被 SET 和 GETSET 命令覆写( overwrite),这意味着,如果一个命令只是修改( alter)一个带生存时间的 key 的值而不是用一个新的 key 值来代替( replace)它的话,那么生存时间不会被改变。
+ 比如说,对一个 key 执行 INCR 命令,对一个列表进行 LPUSH 命令,或者对一个哈希表执行 HSET 命令,这类操作都不会修改 key 本身的生存时间。
+ 另一方面,如果使用 RENAME 对一个 key 进行改名,那么改名后的 key 的生存时间和改名前一样。
+ RENAME 命令的另一种可能是,尝试将一个带生存时间的 key 改名成另一个带生存时间的 another_key ,这时旧的 another_key( 以及它的生存时间)会被删除,然后旧的 key 会改名为 another_key ,因此,新的 another_key 的生存时间也和原本的 key 一样。
+ 使用 PERSIST 命令可以在不删除 key 的情况下,移除 key 的生存时间,让 key 重新成为一个『持久的』(persistent) key 。
+ 更新生存时间
+ 可以对一个已经带有生存时间的 key 执行 EXPIRE 命令,新指定的生存时间会取代旧的生存时间。
+ 过期时间的精确度
+ 在 Redis 2.4 版本中,过期时间的延迟在 1 秒钟之内 —— 也即是,就算 key 已经过期,但它还是可能在过期之后一秒钟之内被访问到,而在新的 Redis 2.6 版本中,延迟被降低到 1 毫秒之内。
+ Redis 2.1.3 之前的不同之处
+ 在 Redis 2.1.3 之前的版本中,修改一个带有生存时间的 key 会导致整个 key 被删除,这一行为是受当时复制( replication)层的限制而作出的,现在这一限制已经被修复。
+
+
+ + + 查找所有符合给定模式 pattern 的 key 。 + * 匹配数据库中所有 key。 + h?llo 匹配 hello , hallo 和 hxllo 等。 + h[ae]llo 匹配 hello 和 hallo ,但不匹配 hillo 。 + + 给定模式 + 符合给定模式的 key 列表。 + + + + 将当前数据库的 key 移动到给定的数据库 db 当中。 + 如果当前数据库(源数据库)和给定数据库(目标数据库)有相同名字的给定 key ,或者 key 不存在于当前数据库,那么 MOVE 没有任何效果。 + 因此,也可以利用这一特性,将 MOVE 当作锁(locking)原语(primitive)。 + + 关键字 + 数据块 + 是否移动成功 + + + + 移除给定 key 的生存时间,将这个 key 从『易失的』(带生存时间 key )转换成『持久的』(一个不带生存时间、永不过期的 key )。 + 当生存时间移除成功时,返回 1 . + 如果 key 不存在或 key 没有设置生存时间,返回 0 。 + + 关键字 + + 当生存时间移除成功时,返回 1 . + 如果 key 不存在或 key 没有设置生存时间,返回 0 。 + + + + + 从当前数据库中随机返回(不删除)一个 key 。 + 当数据库不为空时,返回一个 key 。 + 当数据库为空时,返回 nil 。 + + + 当数据库不为空时,返回一个 key 。 + 当数据库为空时,返回 nil 。 + + + + + 将 key 改名为 newkey 。 + 当 key 和 newkey 相同,或者 key 不存在时,返回一个错误。 + 当 newkey 已经存在时, RENAME 命令将覆盖旧值。 + + 旧的key + 新的key + + 改名成功时提示 OK ,失败时候返回一个错误。 + + + + + 返回 key 所储存的值的类型。none (key不存在),string (字符串),list (列表),set (集合),zset (有序集),hash (哈希表) + + 关键字 + 类型 + + + + 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。 + + 关键字 + 当 key 不存在时,返回 -2 。当 key 存在但没有设置剩余生存时间时,返回 -1 。否则,以秒为单位,返回 key 的剩余生存时间。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。 + 如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样。 + 返回追加 value 之后, key 中字符串的长度。 + + 关键字 + 数值 + + 追加 value 之后, key 中字符串的长度。 + + + + + 将 key 中储存的数字值减一。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECR 操作。 + 如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。 + 本操作的值限制在 64 位(bit)有符号数字表示之内。 + 返回执行 DECR 命令之后 key 的值。 + + 关键字 + 执行 DECR 命令之后 key 的值。 + + + + 将 key 所储存的值减去减量 decrement 。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECR 操作。 + 如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。 + 本操作的值限制在 64 位(bit)有符号数字表示之内。 + 返回减去 decrement 之后, key 的值。 + + 关键字 + 操作的值 + 返回减去 decrement 之后, key 的值。 + + + + 返回 key 所关联的字符串值。如果 key 不存在那么返回特殊值 nil 。 + 假如 key 储存的值不是字符串类型,返回一个错误,因为 GET 只能用于处理字符串值。 + + 关键字 + 当 key 不存在时,返回 nil ,否则,返回 key 的值。 + + + + 返回 key 中字符串值的子字符串,字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)。 + 负数偏移量表示从字符串最后开始计数, -1 表示最后一个字符, -2 表示倒数第二个,以此类推。 + 返回截取得出的子字符串。 + + 关键字 + 截取开始的位置 + 截取结束的位置 + 返回截取得出的子字符串。 + + + + 将给定 key 的值设为 value ,并返回 key 的旧值(old value)。当 key 存在但不是字符串类型时,返回一个错误。 + + 关键字 + 新的值 + 返回给定 key 的旧值。当 key 没有旧值时,也即是, key 不存在时,返回 nil 。 + + + + 将 key 中储存的数字值增一。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。 + 如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。 + 返回执行 INCR 命令之后 key 的值。 + + 关键字 + 返回执行 INCR 命令之后 key 的值。 + + + + 将 key 所储存的值加上增量 increment 。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。 + 如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。 + + 关键字 + 增量数据 + 加上 increment 之后, key 的值。 + + + + 将 key 所储存的值加上增量 increment 。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCRBYFLOAT 操作。 + 如果命令执行成功,那么 key 的值会被更新为(执行加法之后的)新值,并且新值会以字符串的形式返回给调用者 + + 关键字 + 增量数据 + 执行命令之后 key 的值。 + + + + 返回所有(一个或多个)给定 key 的值。 + 如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 null 。因此,该命令永不失败。 + + 关键字数组 + 一个包含所有给定 key 的值的列表。 + + + + 同时设置一个或多个 key-value 对。 + 如果某个给定 key 已经存在,那么 MSET 会用新值覆盖原来的旧值,如果这不是你所希望的效果,请考虑使用 MSETNX 命令:它只会在所有给定 key 都不存在的情况下进行设置操作。 + + 关键字数组 + 值数组 + 总是返回 OK (因为 MSET 不可能失败) + + + + 将字符串值 value 关联到 key 。 + 如果 key 已经持有其他值, SET 就覆写旧值,无视类型。 + 对于某个原本带有生存时间(TTL)的键来说, 当 SET 命令成功在这个键上执行时,这个键原有的 TTL 将被清除。 + + 关键字 + 数据值 + SET 在设置操作成功完成时,才返回 OK 。 + + + + 将字符串值 value 关联到 key 。并发布一个订阅的频道数据,都成功时,才返回成功 + + 关键字 + 数据值 + 是否成功的结果对象 + + + + 将值 value 关联到 key ,并将 key 的生存时间设为 seconds (以秒为单位)。如果 key 已经存在, SETEX 命令将覆写旧值。 + + 关键字 + 数值 + 生存时间,单位秒 + 设置成功时返回 OK 。当 seconds 参数不合法时,返回一个错误。 + + + + 将 key 的值设为 value ,当且仅当 key 不存在。若给定的 key 已经存在,则 SETNX 不做任何动作。设置成功,返回 1 。设置失败,返回 0 。 + + 关键字 + 数据值 + 设置成功,返回 1 。设置失败,返回 0 。 + + + + 用 value 参数覆写(overwrite)给定 key 所储存的字符串值,从偏移量 offset 开始。不存在的 key 当作空白字符串处理。返回被 SETRANGE 修改之后,字符串的长度。 + + 关键字 + 数值 + 起始的偏移量 + 被 SETRANGE 修改之后,字符串的长度。 + + + + 返回 key 所储存的字符串值的长度。当 key 储存的不是字符串值时,返回一个错误。返回符串值的长度。当 key 不存在时,返回 0 。 + + 关键字 + 字符串值的长度。当 key 不存在时,返回 0 。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 将值 value 插入到列表 key 当中,位于值 pivot 之前。 + 当 pivot 不存在于列表 key 时,不执行任何操作。 + 当 key 不存在时, key 被视为空列表,不执行任何操作。 + 如果 key 不是列表类型,返回一个错误。 + + 关键字 + 数值 + 原先的值 + + 如果命令执行成功,返回插入操作完成之后,列表的长度。 + 如果没有找到 pivot ,返回 -1 。 + 如果 key 不存在或为空列表,返回 0 。 + + + + + 将值 value 插入到列表 key 当中,位于值 pivot 之后。 + 当 pivot 不存在于列表 key 时,不执行任何操作。 + 当 key 不存在时, key 被视为空列表,不执行任何操作。 + 如果 key 不是列表类型,返回一个错误。 + + 关键字 + 数值 + 原先的值 + + 如果命令执行成功,返回插入操作完成之后,列表的长度。 + 如果没有找到 pivot ,返回 -1 。 + 如果 key 不存在或为空列表,返回 0 。 + + + + + 返回列表 key 的长度。如果 key 不存在,则 key 被解释为一个空列表,返回 0 .如果 key 不是列表类型,返回一个错误。 + + 关键字 + 列表 key 的长度。 + + + + 返回列表 key 中,下标为 index 的元素。下标(index)参数 start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。 + 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。如果 key 不是列表类型,返回一个错误。 + + 关键字 + 索引位置 + 列表中下标为 index 的元素。如果 index 参数的值不在列表的区间范围内(out of range),返回 nil 。 + + + + 移除并返回列表 key 的头元素。列表的头元素。当 key 不存在时,返回 nil 。 + + 关键字信息 + 列表的头元素。 + + + + 将一个或多个值 value 插入到列表 key 的表头,如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。当 key 存在但不是列表类型时,返回一个错误。返回执行 LPUSH 命令后,列表的长度。 + + 关键字 + 值 + 执行 LPUSH 命令后,列表的长度。 + + + + 将一个或多个值 value 插入到列表 key 的表头,如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。当 key 存在但不是列表类型时,返回一个错误。返回执行 LPUSH 命令后,列表的长度。 + + 关键字 + 值 + 执行 LPUSH 命令后,列表的长度。 + + + + 将值 value 插入到列表 key 的表头,当且仅当 key 存在并且是一个列表。和 LPUSH 命令相反,当 key 不存在时, LPUSHX 命令什么也不做。 + 返回LPUSHX 命令执行之后,表的长度。 + + 关键字 + 值 + 是否插入数据成功 + + + + 返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指定。 + 下标(index)参数 start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。 + 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。 + 返回一个列表,包含指定区间内的元素。 + + 关键字 + 开始的索引 + 结束的索引 + 返回一个列表,包含指定区间内的元素。 + + + + 根据参数 count 的值,移除列表中与参数 value 相等的元素。count 的值可以是以下几种: + count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。 + count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。 + count = 0 : 移除表中所有与 value 相等的值。 + 返回被移除的数量。 + + 关键字 + 移除参数 + 匹配的值 + 被移除元素的数量。因为不存在的 key 被视作空表(empty list),所以当 key 不存在时, LREM 命令总是返回 0 。 + + + + 设置数组的某一个索引的数据信息,当 index 参数超出范围,或对一个空列表( key 不存在)进行 LSET 时,返回一个错误。 + + 关键字 + 索引位置 + 值 + 操作成功返回 ok ,否则返回错误信息。 + + + + 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。 + 举个例子,执行命令 LTRIM list 0 2 ,表示只保留列表 list 的前三个元素,其余元素全部删除。 + 下标( index)参数 start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。 + 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。 + 当 key 不是列表类型时,返回一个错误。 + + 关键字信息 + 起始的索引信息 + 结束的索引信息 + 操作成功返回 ok ,否则返回错误信息。 + + + + 移除并返回列表 key 的尾元素。当 key 不存在时,返回 nil 。 + + 关键字信息 + 列表的尾元素。 + + + + 命令 RPOPLPUSH 在一个原子时间内,执行以下两个动作:
+ 1. 将列表 source 中的最后一个元素( 尾元素)弹出,并返回给客户端。
+ 2. 将 source 弹出的元素插入到列表 destination ,作为 destination 列表的的头元素。

+ 举个例子,你有两个列表 source 和 destination , source 列表有元素 a, b, c , destination 列表有元素 x, y, z ,执行 RPOPLPUSH source destination 之后, source 列表包含元素 a, b , destination 列表包含元素 c, x, y, z ,并且元素 c 会被返回给客户端。 + 如果 source 不存在,值 nil 被返回,并且不执行其他动作。 + 如果 source 和 destination 相同,则列表中的表尾元素被移动到表头,并返回该元素,可以把这种特殊情况视作列表的旋转( rotation)操作。 +
+ 第一个关键字 + 第二个关键字 + 返回的移除的对象 +
+ + + 将一个或多个值 value 插入到列表 key 的表尾(最右边)。 + 如果 key 不存在,一个空列表会被创建并执行 RPUSH 操作。当 key 存在但不是列表类型时,返回一个错误。 + + 关键字 + 值 + 返回执行 RPUSH 操作后,表的长度。 + + + + 将一个或多个值 value 插入到列表 key 的表尾(最右边)。 + 如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表尾:比如对一个空列表 mylist 执行 RPUSH mylist a b c ,得出的结果列表为 a b c , + 如果 key 不存在,一个空列表会被创建并执行 RPUSH 操作。当 key 存在但不是列表类型时,返回一个错误。 + 返回执行 RPUSH 操作后,表的长度。 + + 关键字 + 值 + 返回执行 RPUSH 操作后,表的长度。 + + + + 将值 value 插入到列表 key 的表尾,当且仅当 key 存在并且是一个列表。 + 和 RPUSH 命令相反,当 key 不存在时, RPUSHX 命令什么也不做。 + + 关键字 + 值 + RPUSHX 命令执行之后,表的长度。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略。 + + 关键字 + 域 + 被成功移除的域的数量,不包括被忽略的域。 + + + + 删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略。返回被成功移除的域的数量,不包括被忽略的域。 + + 关键字 + 所有的域 + 返回被成功移除的域的数量,不包括被忽略的域。 + + + + 查看哈希表 key 中,给定域 field 是否存在。如果哈希表含有给定域,返回 1 。 + 如果哈希表不含有给定域,或 key 不存在,返回 0 。 + + 关键字 + 域 + 如果哈希表含有给定域,返回 1 。如果哈希表不含有给定域,或 key 不存在,返回 0 。 + + + + 返回哈希表 key 中给定域 field 的值。当给定域不存在或是给定 key 不存在时,返回 nil + + 关键值 + 域 + + 给定域的值。 + 当给定域不存在或是给定 key 不存在时,返回 nil 。 + + + + + 返回哈希表 key 中,所有的域和值。在返回值里,紧跟每个域名(field name)之后是域的值(value),所以返回值的长度是哈希表大小的两倍。 + + 关键值 + + 以列表形式返回哈希表的域和域的值。 + 若 key 不存在,返回空列表。 + + + + + 为哈希表 key 中的域 field 的值加上增量 increment 。增量也可以为负数,相当于对给定域进行减法操作。 + 如果 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。返回执行 HINCRBY 命令之后,哈希表 key 中域 field 的值。 + + 关键字 + 域 + 增量值 + 返回执行 HINCRBY 命令之后,哈希表 key 中域 field 的值。 + + + + 为哈希表 key 中的域 field 的值加上增量 increment 。增量也可以为负数,相当于对给定域进行减法操作。 + 如果 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。返回执行 HINCRBY 命令之后,哈希表 key 中域 field 的值。 + + 关键字 + 域 + 增量值 + 返回执行 HINCRBY 命令之后,哈希表 key 中域 field 的值。 + + + + 返回哈希表 key 中的所有域。当 key 不存在时,返回一个空表。 + + 关键值 + + 一个包含哈希表中所有域的表。 + 当 key 不存在时,返回一个空表。 + + + + + 返回哈希表 key 中域的数量。 + + 关键字 + 哈希表中域的数量。当 key 不存在时,返回 0 。 + + + + 返回哈希表 key 中,一个或多个给定域的值。如果给定的域不存在于哈希表,那么返回一个 nil 值。 + 因为不存在的 key 被当作一个空哈希表来处理,所以对一个不存在的 key 进行 HMGET 操作将返回一个只带有 nil 值的表。 + + 关键值 + 指定的域 + + 一个包含多个给定域的关联值的表,表值的排列顺序和给定域参数的请求顺序一样。 + + + + + 将哈希表 key 中的域 field 的值设为 value 。 + 如果 key 不存在,一个新的哈希表被创建并进行 HSET 操作。 + 如果域 field 已经存在于哈希表中,旧值将被覆盖。 + 如果 field 是哈希表中的一个新建域,并且值设置成功,返回 1 。 + 如果哈希表中域 field 已经存在且旧值已被新值覆盖,返回 0 。 + + 关键字 + 域 + 数据值 + + 如果 field 是哈希表中的一个新建域,并且值设置成功,返回 1 。 + 如果哈希表中域 field 已经存在且旧值已被新值覆盖,返回 0 。 + + + + + 同时将多个 field-value (域-值)对设置到哈希表 key 中。 + 此命令会覆盖哈希表中已存在的域。 + 如果 key 不存在,一个空哈希表被创建并执行 HMSET 操作。 + + 关键字 + 域 + 数据值 + + 如果命令执行成功,返回 OK 。 + 当 key 不是哈希表(hash)类型时,返回一个错误 + + + + + 将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在。若域 field 已经存在,该操作无效。 + 设置成功,返回 1 。如果给定域已经存在且没有操作被执行,返回 0 。 + + 关键字 + 域 + 数据值 + 设置成功,返回 1 。如果给定域已经存在且没有操作被执行,返回 0 。 + + + + 返回哈希表 key 中所有域的值。当 key 不存在时,返回一个空表。 + + 关键值 + + 返回哈希表 key 中所有域的值。 + 当 key 不存在时,返回一个空表。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 将一个member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。假如 key 不存在,则创建一个只包含 member 元素作成员的集合。当 key 不是集合类型时,返回一个错误。 + + 关键字信息 + 等待添加的元素 + 被添加到集合中的新元素的数量,不包括被忽略的元素。 + + + + 将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。假如 key 不存在,则创建一个只包含 member 元素作成员的集合。当 key 不是集合类型时,返回一个错误。 + + 关键字信息 + 等待添加的元素 + 被添加到集合中的新元素的数量,不包括被忽略的元素。 + + + + 返回集合 key 的基数(集合中元素的数量)。当 key 不存在时,返回 0 。 + + 集合 key 的名称 + 集合的基数。 + + + + 返回一个集合的全部成员,该集合是所有给定集合之间的差集。 + + 集合关键字 + 集合关键字 + 交集成员的列表。 + + + + + 返回一个集合的全部成员,该集合是所有给定集合之间的差集。 + + 集合关键字 + 集合关键字 + 交集成员的列表。 + + + + 这个命令的作用和 SDIFF 类似,但它将结果保存到 destination 集合,而不是简单地返回结果集。如果 destination 集合已经存在,则将其覆盖。destination 可以是 key 本身。 + + 目标集合 + 等待操作的集合 + 运算的集合 + 结果集中的元素数量。 + + + + 这个命令的作用和 SDIFF 类似,但它将结果保存到 destination 集合,而不是简单地返回结果集。如果 destination 集合已经存在,则将其覆盖。destination 可以是 key 本身。 + + 目标集合 + 等待操作的集合 + 运算的集合 + 结果集中的元素数量。 + + + + 返回一个集合的全部成员,该集合是所有给定集合的交集。不存在的 key 被视为空集。当给定集合当中有一个空集时,结果也为空集(根据集合运算定律)。 + + 集合关键字 + 运算的集合 + 交集成员的列表。 + + + + 返回一个集合的全部成员,该集合是所有给定集合的交集。不存在的 key 被视为空集。当给定集合当中有一个空集时,结果也为空集(根据集合运算定律)。 + + 集合关键字 + 运算的集合 + 交集成员的列表。 + + + + 这个命令类似于 SINTER 命令,但它将结果保存到 destination 集合,而不是简单地返回结果集。如果 destination 集合已经存在,则将其覆盖。destination 可以是 key 本身。 + + 目标集合 + 等待操作的集合 + 运算的集合 + 结果集中的成员数量。 + + + + 这个命令类似于 SINTER 命令,但它将结果保存到 destination 集合,而不是简单地返回结果集。如果 destination 集合已经存在,则将其覆盖。destination 可以是 key 本身。 + + 目标集合 + 等待操作的集合 + 运算的集合 + 结果集中的成员数量。 + + + + 判断 member 元素是否集合 key 的成员。如果 member 元素是集合的成员,返回 1 。如果 member 元素不是集合的成员,或 key 不存在,返回 0 。 + + 集合key + 元素 + 如果 member 元素是集合的成员,返回 1 。如果 member 元素不是集合的成员,或 key 不存在,返回 0 。 + + + + 返回集合 key 中的所有成员。不存在的 key 被视为空集合。 + + 集合key + 集合中的所有成员。 + + + + 将 member 元素从 source 集合移动到 destination 集合。如果 source 集合不存在或不包含指定的 member 元素,则 SMOVE 命令不执行任何操作,仅返回 0 。 + 否则, member 元素从 source 集合中被移除,并添加到 destination 集合中去。当 destination 集合已经包含 member 元素时, SMOVE 命令只是简单地将 source 集合中的 member 元素删除。 + 当 source 或 destination 不是集合类型时,返回一个错误。 + + 原集合 + 目标集合 + 元素 + 如果 member 元素被成功移除,返回 1 。如果 member 元素不是 source 集合的成员,并且没有任何操作对 destination 集合执行,那么返回 0 。 + + + + 移除并返回集合中的一个随机元素。如果只想获取一个随机元素,但不想该元素从集合中被移除的话,可以使用 SRANDMEMBER 命令。 + + 集合关键字 + 被移除的随机元素。当 key 不存在或 key 是空集时,返回 nil 。 + + + + 那么返回集合中的一个随机元素。 + + 集合关键字 + 返回一个元素;如果集合为空,返回 nil 。 + + + + 返回集合中的多个随机元素。
+ 如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。如果 count 大于等于集合基数,那么返回整个集合。
+ 如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值。 +
+ 集合关键字 + 元素个数 + 返回一个数组;如果集合为空,返回空数组。 +
+ + + 移除集合 key 中的一个元素,不存在的 member 元素会被忽略。 + + 集合关键字 + 等待移除的元素 + 被成功移除的元素的数量,不包括被忽略的元素。 + + + + 移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略。 + + 集合关键字 + 等待移除的元素 + 被成功移除的元素的数量,不包括被忽略的元素。 + + + + 返回一个集合的全部成员,该集合是所有给定集合的并集。不存在的 key 被视为空集。 + + 集合关键字 + 并集的集合 + 并集成员的列表。 + + + + 返回一个或多个集合的全部成员,该集合是所有给定集合的并集。不存在的 key 被视为空集。 + + 集合关键字 + 并集的集合 + 并集成员的列表。 + + + + 这个命令类似于 SUNION 命令,但它将结果保存到 destination 集合,而不是简单地返回结果集。如果 destination 已经存在,则将其覆盖。destination 可以是 key 本身。 + + 存储的目标集合 + 集合关键字 + 并集的集合 + 结果集中的元素数量。 + + + + 这个命令类似于 SUNION 命令,但它将结果保存到 destination 集合,而不是简单地返回结果集。如果 destination 已经存在,则将其覆盖。destination 可以是 key 本身。 + + 存储的目标集合 + 集合关键字 + 并集的集合 + 结果集中的元素数量。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 将一个 member 元素及其 score 值加入到有序集 key 当中。如果某个 member 已经是有序集的成员,那么更新这个 member 的 score 值,并通过重新插入这个 member 元素,来保证该 member 在正确的位置上。 + score 值可以是整数值或双精度浮点数。
+ 如果 key 不存在,则创建一个空的有序集并执行 ZADD 操作。当 key 存在但不是有序集类型时,返回一个错误。 +
+ 有序集合的关键字 + 有序集合的元素 + 每个元素的得分 + 被成功添加的新成员的数量,不包括那些被更新的、已经存在的成员。 +
+ + + 将一个或多个 member 元素及其 score 值加入到有序集 key 当中。如果某个 member 已经是有序集的成员,那么更新这个 member 的 score 值,并通过重新插入这个 member 元素,来保证该 member 在正确的位置上。 + score 值可以是整数值或双精度浮点数。
+ 如果 key 不存在,则创建一个空的有序集并执行 ZADD 操作。当 key 存在但不是有序集类型时,返回一个错误。 +
+ 有序集合的关键字 + 有序集合的元素 + 每个元素的得分 + 被成功添加的新成员的数量,不包括那些被更新的、已经存在的成员。 +
+ + + 返回有序集 key 的基数。 + + 有序集合的关键字 + 当 key 存在且是有序集类型时,返回有序集的基数。当 key 不存在时,返回 0 。 + + + + 返回有序集 key 中, score 值在 min 和 max 之间(默认包括 score 值等于 min 或 max )的成员的数量。 + + 有序集合的关键字 + 最小值,包含 + 最大值,包含 + score 值在 min 和 max 之间的成员的数量。 + + + + 为有序集 key 的成员 member 的 score 值加上增量 increment 。可以通过传递一个负数值 increment ,让 score 减去相应的值,比如 ZINCRBY key -5 member ,就是让 member 的 score 值减去 5 。 + 当 key 不存在,或 member 不是 key 的成员时, ZINCRBY key increment member 等同于 ZADD key increment member 。当 key 不是有序集类型时,返回一个错误。 + + 有序集合的关键字 + 成员名称 + 增量数据,可以为负数 + member 成员的新 score 值,以字符串形式表示。 + + + + 返回有序集 key 中,指定区间内的成员。其中成员的位置按 score 值递增(从小到大)来排序。具有相同 score 值的成员按字典序来排列。 + 下标参数 start 和 stop 都以 0 为底,也就是说,以 0 表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推。你也可以使用负数下标,以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推。 + + + 超出范围的下标并不会引起错误。比如说,当 start 的值比有序集的最大下标还要大,或是 start > stop 时, ZRANGE 命令只是简单地返回一个空列表。另一方面,假如 stop 参数的值比有序集的最大下标还要大,那么 Redis 将 stop 当作最大下标来处理。 + 可以通过使用 WITHSCORES 选项,来让成员和它的 score 值一并返回,返回列表以 value1,score1, ..., valueN,scoreN 的格式表示。客户端库可能会返回一些更复杂的数据类型,比如数组、元组等。 + + 有序集合的关键字 + 起始的下标 + 结束的下标 + 是否带有 score 返回 + 指定区间内,根据参数 withScore 来决定是否带 score 值的有序集成员的列表。 + + + + 返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列。 + min 和 max 可以是 -inf 和 +inf ,这样一来,你就可以在不知道有序集的最低和最高 score 值的情况下,使用 ZRANGEBYSCORE 这类命令。 + 默认情况下,区间的取值使用闭区间 (小于等于或大于等于),你也可以通过给参数前增加 "(" 符号来使用可选的开区间 (小于或大于)。"(5"代表不包含5 + + 有序集合的关键字 + 最小值,可以为-inf,代表最高,如果为5,代表大于等于5,如果是(5,代表大于5 + 最大值,可以为+inf,代表最低,如果为10,代表小于等于5,如果是(10,代表小于10 + 是否带有 score 返回 + 指定区间内,带有 score 值(根据参数 withScore 来决定)的有序集成员的列表。 + + + + 返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递增(从小到大)顺序排列。排名以 0 为底,也就是说, score 值最小的成员排名为 0 。 + + 有序集合的关键字 + 成员 member 的名称 + 如果 member 是有序集 key 的成员,返回 member 的排名。如果 member 不是有序集 key 的成员,返回 nil 。 + + + + 移除有序集 key 中的指定成员,不存在的成员将被忽略。当 key 存在但不是有序集类型时,返回一个错误。 + + 有序集合的关键字 + 等待被移除的成员 + 被成功移除的成员的数量,不包括被忽略的成员。 + + + + 移除有序集 key 中的一个或多个成员,不存在的成员将被忽略。当 key 存在但不是有序集类型时,返回一个错误。 + + 有序集合的关键字 + 等待被移除的成员 + 被成功移除的成员的数量,不包括被忽略的成员。 + + + + 移除有序集 key 中,指定排名(rank)区间内的所有成员。区间分别以下标参数 start 和 stop 指出,包含 start 和 stop 在内。 + 下标参数 start 和 stop 都以 0 为底,也就是说,以 0 表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推。你也可以使用负数下标,以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推。 + + 有序集合的关键 + 开始的下标 + 结束的下标 + 被移除成员的数量。 + + + + 移除有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。 + min 和 max 可以是 -inf 和 +inf ,这样一来,你就可以在不知道有序集的最低和最高 score 值的情况下,使用 ZRANGEBYSCORE 这类命令。 + 默认情况下,区间的取值使用闭区间 (小于等于或大于等于),你也可以通过给参数前增加 "(" 符号来使用可选的开区间 (小于或大于)。例如"(5"代表不包括5 + + 有序集合的关键字 + 最小值,可以为-inf,代表最低,如果为5,代表大于等于5,如果是(5,代表大于5 + 最大值,可以为+inf,代表最低,如果为10,代表小于等于5,如果是(10,代表小于10 + 被移除成员的数量。 + + + + 返回有序集 key 中,指定区间内的成员。其中成员的位置按 score 值递减(从大到小)来排列。具有相同 score 值的成员按字典序来排列。 + 下标参数 start 和 stop 都以 0 为底,也就是说,以 0 表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推。你也可以使用负数下标,以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推。 + + + 超出范围的下标并不会引起错误。比如说,当 start 的值比有序集的最大下标还要大,或是 start > stop 时, ZRANGE 命令只是简单地返回一个空列表。另一方面,假如 stop 参数的值比有序集的最大下标还要大,那么 Redis 将 stop 当作最大下标来处理。 + 可以通过使用 WITHSCORES 选项,来让成员和它的 score 值一并返回,返回列表以 value1,score1, ..., valueN,scoreN 的格式表示。客户端库可能会返回一些更复杂的数据类型,比如数组、元组等。 + + 有序集合的关键字 + 起始的下标 + 结束的下标 + 是否带有 score 返回 + 指定区间内,根据参数 withScore 来决定是否带 score 值的有序集成员的列表。 + + + + 返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。序集成员按 score 值递减(从大到小)的次序排列。 + min 和 max 可以是 -inf 和 +inf ,这样一来,你就可以在不知道有序集的最低和最高 score 值的情况下,使用 ZRANGEBYSCORE 这类命令。 + 默认情况下,区间的取值使用闭区间 (小于等于或大于等于),你也可以通过给参数前增加 ( 符号来使用可选的开区间 (小于或大于)。(5代表不包含5 + + 有序集合的关键字 + 最大值,可以为+inf,代表最高,如果为10,代表小于等于5,如果是(10,代表小于10 + 最小值,可以为-inf,代表最低,如果为5,代表大于等于5,如果是(5,代表大于5 + 是否带有 score 返回 + 指定区间内,带有 score 值(根据参数 withScore 来决定)的有序集成员的列表。 + + + + 返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递减(从大到小)排序。排名以 0 为底,也就是说,score 值最大的成员排名为 0 。 + + 有序集合的关键字 + 成员 member 的名称 + 如果 member 是有序集 key 的成员,返回 member 的排名。如果 member 不是有序集 key 的成员,返回 nil 。 + + + + 返回有序集 key 中,成员 member 的 score 值。如果 member 元素不是有序集 key 的成员,或 key 不存在,返回 nil 。 + + 有序集合的关键字 + 成员的名称 + member 成员的 score 值,以字符串形式表示。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 从设备里读取支持Hsl特性的数据内容, + 该特性为, + + 详细参考代码示例的操作说明。 + + 自定义的数据类型对象 + 包含是否成功的结果对象 + + 我们来说明下这个方法到底是怎么用的,当我们需要读取redis好几个数据的时候,我们很可能写如下的代码: + + 总的来说,当读取的数据种类比较多的时候,读取的关键字比较多的时候,处理起来就比较的麻烦,此处推荐一个全新的写法,为了更好的对比,我们假设实现一种需求 + + 为此我们只需要实现一个特性类即可。代码如下:(注意,实际是很灵活的,类型都是自动转换的) + + 当然了,异步也是一样的,异步的代码就不重复介绍了。 + + + + + + 从设备里写入支持Hsl特性的数据内容, + 该特性为 + 需要注意的是写入并不支持特性,详细参考代码示例的操作说明。 + + 自定义的数据类型对象 + 等待写入的数据参数 + 包含是否成功的结果对象 + + + + + + + + + + + + + SAVE 命令执行一个同步保存操作,将当前 Redis 实例的所有数据快照(snapshot)以 RDB 文件的形式保存到硬盘。 + + 保存成功时返回 OK 。 + + + + 在后台异步(Asynchronously)保存当前数据库的数据到磁盘。 + BGSAVE 命令执行之后立即返回 OK ,然后 Redis fork 出一个新子进程,原来的 Redis 进程(父进程)继续处理客户端请求,而子进程则负责将数据保存到磁盘,然后退出。 + + 反馈信息。 + + + + 获取服务器的时间戳信息,可用于本地时间的数据同步问题 + + 带有服务器时间的结果对象 + + + + 向服务器进行PING的操作,服务器会返回PONG操作 + + 是否成功 + + + + 返回当前数据库的 key 的数量。 + + 当前数据库的 key 的数量。 + + + + 清空当前的数据库的key信息 + + 总是返回 OK 。 + + + + 修改Redis的密码信息,如果不需要密码,则传入空字符串即可 + + 密码信息 + 是否更新了密码信息 + + + + + + + + + + + + + + + + + + + 将信息 message 发送到指定的频道 channel,返回接收到信息 message 的订阅者数量。 + + 频道,和关键字不是一回事 + 消息 + 接收到信息 message 的订阅者数量。 + + + + + + + 切换到指定的数据库,数据库索引号 index 用数字值指定,以 0 作为起始索引值。默认使用 0 号数据库。 + + 索引值 + 是否切换成功 + + + + + + + 当接收到Redis订阅的信息的时候触发
+ Triggered when receiving Redis subscription information +
+ 主题信息 + 数据信息 +
+ + + 当接收到Redis订阅的信息的时候触发 + + + + + 从Redis服务器订阅一个或多个主题信息
+ Subscribe to one or more topics from the redis server +
+ 主题信息 + 订阅结果 +
+ + + + + + 取消订阅一个或多个主题信息,取消之后,当前的订阅数据就不在接收到。
+ Unsubscribe from multiple topic information. After cancellation, the current subscription data will not be received. +
+ 主题信息 + 取消订阅结果 +
+ + + + + + + + + 同步访问数据的客户端类,用于向服务器请求一些确定的数据信息 + + + 详细的使用说明,请参照博客http://www.cnblogs.com/dathlin/p/7697782.html + + + 此处贴上了Demo项目的服务器配置的示例代码 + + + + + + 实例化一个客户端的对象,用于和服务器通信 + + 服务器的ip地址 + 服务器的端口号 + + + + 实例化一个客户端的对象,用于和服务器通信 + + 服务器的ip地址 + 服务器的端口号 + + + + 实例化一个客户端对象,需要手动指定Ip地址和端口 + + + + + + + + + + + + + + 客户端向服务器进行请求,请求字符串数据,忽略了自定义消息反馈 + + 用户的指令头 + 发送数据 + 带返回消息的结果对象 + + + + 客户端向服务器进行请求,请求字符串数组,忽略了自定义消息反馈 + + 用户的指令头 + 发送数据 + 带返回消息的结果对象 + + + + 客户端向服务器进行请求,请求字节数据 + + 用户的指令头 + 发送的字节内容 + 带返回消息的结果对象 + + + + 客户端向服务器进行请求,请求字符串数据,并返回状态信息 + + 用户的指令头 + 发送数据 + 带返回消息的结果对象 + + + + 客户端向服务器进行请求,请求字符串数据,并返回状态信息 + + 用户的指令头 + 发送数据 + 带返回消息的结果对象 + + + + 客户端向服务器进行请求,请求字符串数据,并返回状态信息 + + 用户的指令头 + 发送数据 + 带返回消息的结果对象 + + + + 需要发送的底层数据 + + 需要发送的底层数据 + 带返回消息的结果对象 + + + + 需要发送的底层数据 + + 需要发送的底层数据 + 带返回消息的结果对象 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 消息处理服务器,主要用来实现接收客户端信息并进行消息反馈的操作,适用于客户端进行远程的调用,要求服务器反馈数据。
+ The message processing server is mainly used to implement the operation of receiving client information and performing message feedback. It is applicable to remote calls made by clients and requires the server to feedback data. +
+ + 详细的使用说明,请参照博客http://www.cnblogs.com/dathlin/p/7697782.html + + + 此处贴上了Demo项目的服务器配置的示例代码 + + +
+ + + 实例化一个默认的对象
+ Instantiate a default object +
+
+ + + 接收字符串信息的事件 + + + + + 接收字符串数组信息的事件 + + + + + 接收字节信息的事件 + + + + + 向指定的通信对象发送字符串数据 + + 通信对象 + 用户的指令头 + 实际发送的字符串数据 + + + + 向指定的通信对象发送字符串数组 + + 通信对象 + 用户的指令头 + 实际发送的字符串数组 + + + + 向指定的通信对象发送字节数据 + + 连接对象 + 用户的指令头 + 实际的数据 + + + + 关闭网络的操作 + + + + + 当接收到了新的请求的时候执行的操作 + + 异步对象 + 终结点 + + + + 让客户端正常下线,调用本方法即可自由控制会话客户端强制下线操作。 + + 会话对象 + + + + 当前在线的客户端数量 + + + + + + + + 文件的扩展信息 + + + + + 文件的完整名称 + + + + + 文件的修改时间 + + + + + 文件的MD5码 + + + + + 用于服务器支持软件全自动更新升级的类
+ Class for server support software full automatic update and upgrade +
+ + 目前的更新机制是全部文件的更新,没有进行差异化的比较 + +
+ + + 实例化一个默认的对象
+ Instantiate a default object +
+ 更新程序的名称 +
+ + + 系统升级时客户端所在的目录,默认为C:\HslCommunication + + + + + 获取当前在线的客户端数量信息,一般是正在下载中的会话客户端数量。
+ Get information about the number of currently online clients, generally the number of session clients that are being downloaded. +
+
+ + + 获取当前处理的所有的字节信息,并且重置当前的字节数量
+ Get all byte information currently processed and reset the current number of bytes +
+ + 如果每秒调用一次本方法,就可以显示每秒的下载网速总和,如果每分钟调用一次本方法,就可以显示每分钟的下载网络总和
+ If this method is called once per second, the total download speed per second can be displayed. If this method is called once per minute, the total download network speed per minute can be displayed. +
+ 当前处理的字节数量 +
+ + + + + + 获取所有的文件信息,包括所有的子目录的文件信息
+ Get all file information, including file information of all subdirectories +
+ 目标路径 + 日志信息 + 文件名的列表 +
+ + + + + + 转发过程中的中间会话信息 + + + + + 实例化一个默认的对象 + + + + + 指定客户端的 socket 来实例化一个对象 + + 客户端的socket + 指定当前的缓冲区的大小 + + + + 连接服务端的socket + + + + + 服务端的缓存数据信息 + + + + + + + + 用于转发的TCP服务类,可以用来实现TCP协议的转发功能,需要指定本机端口,服务器的ip及端口信息
+ The TCP service class used for forwarding can be used to implement the forwarding function of the TCP protocol. It is necessary to specify the local port, the server's ip and port information. +
+
+ + + 实例化一个TCP转发的对象,需要本机端口号,远程ip地址及远程端口号 + + 本机侦听的端口号 + 远程的IP地址 + 远程的端口号信息 + + + + + + + 获取或设置当前缓冲区的大小,以字节为单位,默认 2048
+ Gets or sets the size of the current buffer, in bytes, with a default of 2048 +
+
+ + + 获取当前的用于中转数据的会话数量 + + + + + + + + + + + 接收消息触发的委托信息 + + 会话对象 + 原始报文数据信息 + + + + 当接收到远程的数据触发的事件 + + + + + 当接收到客户端数据触发的事件 + + + + + + + + 获取所有的会话信息 + + 方便用于显示 + + + + + + + UDP客户端的类,负责发送数据到服务器,然后从服务器接收对应的数据信息,该数据经过HSL封装
+ UDP client class, responsible for sending data to the server, and then receiving the corresponding data information from the server, the data is encapsulated by HSL +
+
+ + + 实例化对象,指定发送的服务器地址和端口号
+ Instantiated object, specifying the server address and port number to send +
+ 服务器的Ip地址 + 端口号 +
+ + + 客户端向服务器进行请求,请求字符串数据,忽略了自定义消息反馈
+ The client makes a request to the server, requesting string data, and ignoring custom message feedback +
+ 用户的指令头 + 发送数据 + 带返回消息的结果对象 +
+ + + 客户端向服务器进行请求,请求字节数据
+ The client makes a request to the server, requesting byte data +
+ 用户的指令头 + 发送的字节内容 + 带返回消息的结果对象 +
+ + + 客户端向服务器进行请求,请求字符串数据,并返回状态信息
+ The client makes a request to the server, requests string data, and returns status information +
+ 用户的指令头 + 发送数据 + 带返回消息的结果对象 +
+ + + 客户端向服务器进行请求,请求字节数据,并返回状态信息
+ The client makes a request to the server, requests byte data, and returns status information +
+ 用户的指令头 + 发送数据 + 带返回消息的结果对象 +
+ + + 发送的底层数据,然后返回结果数据
+ Send the underlying data and then return the result data +
+ 需要发送的底层数据 + 带返回消息的结果对象 +
+ + + 发送的底层数据,然后返回结果数据,该结果是带Handle信息的。
+ Send the underlying data, and then return the result data, the result is with Handle information. +
+ 需要发送的底层数据 + 带返回消息的结果对象 +
+ + + + + + Udp网络的服务器端类,您可以使用本类构建一个简单的,高性能的udp服务器,接收来自其他客户端的数据,当然,您也可以自定义返回你要返回的数据
+ Server-side class of Udp network. You can use this class to build a simple, high-performance udp server that receives data from other clients. Of course, you can also customize the data you want to return. +
+
+ + + + + + 获取或设置一次接收时的数据长度,默认2KB数据长度 + + + + + + + + + + + 重新开始接收数据 + + + + + + 数据处理中心 + + 会话信息 + 暗号 + + + + + + 向指定的通信对象发送字符串数据 + + 通信对象 + 用户的指令头 + 实际发送的字符串数据 + + + + 向指定的通信对象发送字节数据 + + 连接对象 + 用户的指令头 + 实际的数据 + + + + 当接收到文本数据的时候,触发此事件 + + + + + 当接收到字节数据的时候,触发此事件 + + + + + + + + 城市建设部的188协议,基于DJ/T188-2004实现的协议 + + + + + 指定地址域来实例化一个对象,地址域是一个14个字符的BCD码,例如:14910000729011
+ Specify the address field, to instantiate an object, which address field is a 14-character BCD code, for example: 14910000729011 +
+ 设备的地址信息,是一个14字符的BCD码 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 获取或设置仪表的类型,通常是 0x10:冷水水表 0x11:生活热水水表 0x12:直饮水水表 0x13:中水水表 0x20:热量表(热量) 0x21:热量表(冷量) 0x30:燃气表 0x40:电度表 + + + + + 获取或设置当前的地址域信息,是一个14个字符的BCD码,例如:14910000729011
+ Get or set the current address domain information, which is a 14-character BCD code, for example: 14910000729011 +
+
+ + + + + + + + + CJT188串口透传协议 + + + + + + + + + + + + + + + + + + + + 激活设备的命令,只发送数据到设备,不等待设备数据返回
+ The command to activate the device, only send data to the device, do not wait for the device data to return +
+ 是否发送成功 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 获取或设置是否验证匹配接收到的站号信息
+ Gets or sets whether to verify that the received station number information is matched +
+
+ + + + + + CJT协议的流量数据,主要是用来获取水表流量及燃气流量的 + + + + + 当前累积流量 + + + + + 当前累计流量的单位 + + + + + 结算日累积流量 + + + + + 结算日的流量单位 + + + + + 实时时间 + + + + + CJT188辅助方法 + + + + + 从用户输入的地址信息中解析出真实的地址及数据标识 + + 用户输入的地址信息 + 默认的地址域 + 解析结果信息 + + + + 将地址解析成BCD码的地址,并且扩充到14位,不够的补0操作 + + 地址域信息 + 实际的结果 + + + + 将指定的地址信息,控制码信息,数据域信息打包成完整的报文命令 + + 地址域信息,地址域由7个字节构成,每字节2位BCD码,地址长度可达14位十进制数。地址域支持锁位寻址,即从若干低位起,剩余高位补AAH作为通配符进行读表操作 + 仪表类型 + 控制码信息 + 数据域的内容 + 返回是否报文创建成功 + + + + 检查当前的反馈数据信息是否正确 + + CJT188的通信对象 + 从仪表反馈的数据信息 + 是否校验成功 + + + + 根据指定的数据标识来读取相关的原始数据信息,地址标识根据手册来,从高位到地位,例如 91-1F,分割符可以任意特殊字符或是没有分隔符。
+ Read the relevant original data information according to the specified data identifier. The address identifier is based on the manual, + from high to position, such as 91-1F. The separator can be any special character or no separator. +
+ + 地址可以携带地址域信息,例如 "s=2;90-1F" 或是 "s=100000;90-1F",关于数据域信息,需要查找手册,例如:D1-20 表示: 上一月结算日累积流量 + + CJT188的通信对象 + 数据标识,具体需要查找手册来对应 + 数据长度信息 + 结果信息 +
+ + + 根据指定的数据标识来写入相关的原始数据信息,地址标识根据手册来,从高位到地位,例如 90-1F,分割符可以任意特殊字符或是没有分隔符。
+ Read the relevant original data information according to the specified data identifier. The address identifier is based on the manual, + from high to position, such as 90-1F. The separator can be any special character or no separator. +
+ + 地址可以携带地址域信息,例如 "s=2;90-1F" 或是 "s=100000;90-1F",关于数据域信息,需要查找手册,例如:00-01-00-00 表示: (当前)正向有功总电能
+ 注意:本命令必须与编程键配合使用 +
+ CJT188的通信对象 + 地址信息 + 写入的数据值 + 是否写入成功 +
+ + + 读取数据的数组信息,需要指定如何从字符串转换的功能方法 + + 类型信息 + CJT188的通信对象 + 地址信息 + 数据长度 + 转换方法 + 包含泛型数组的结果对象 + + + + 读取设备的通信地址,仅支持点对点通讯的情况,返回地址域数据,例如:14910000729012
+ Read the communication address of the device, only support point-to-point communication, and return the address field data, for example: 149100007290 +
+ CJT188的通信对象 + 设备的通信地址 +
+ + + 写入设备的地址域信息,仅支持点对点通讯的情况,需要指定地址域信息,例如:14910000729011
+ Write the address domain information of the device, only support point-to-point communication, + you need to specify the address domain information, for example: 14910000729011 +
+ CJT188的通信对象 + 等待写入的地址域 + 是否写入成功 +
+ + + 读取指定地址的所有的字符串数据信息,一般来说,一个地址只有一个数据 + + + 地址可以携带地址域信息,例如 "s=2;90-1F" 或是 "s=100000;90-1F" + + CJT通信对象 + 数据标识,具体需要查找手册来对应 + 字符串数组信息 + + + + 控制码信息 + + + + + 读数据 + + + + + 写数据 + + + + + 读地址 + + + + + 写地址 + + + + + CJT188设备的接口 + + + + + 仪表的类型 + + + + + + + + 获取或设置是否在每一次的报文通信时,增加"FE FE"的命令头
+ Get or set whether to add the command header of "FE FE" in each message communication +
+
+ + + 激活设备的命令,只发送数据到设备,不等待设备数据返回
+ The command to activate the device, only send data to the device, do not wait for the device data to return +
+ 是否发送成功 +
+ + + + + + + + + + + + DTSU6606型三相四线电子式电能表的Modbus-RTU通信协议 + + + + + 实例化一个Modbus-Rtu协议的客户端对象
+ Instantiate a client object of the Modbus-Rtu protocol +
+
+ + + 指定客户端自己的站号来初始化
+ Specify the client's own station number to initialize +
+ 客户端自身的站号 +
+ + + 读取电表的电参数类,主要包含电压,电流,频率,有功功率,无功功率,视在功率,功率因数
+ Read the electrical parameters of the meter, including voltage, current, frequency, active power, reactive power, apparent power, and power factor +
+ 包含是否成功的电表结果对象 +
+ + + + + + 电参数类 + + + + + A相电压,单位V + + + + + B相电压,单位V + + + + + C相电压,单位V + + + + + A相电流,单位A + + + + + B相电流,单位A + + + + + C相电流,单位A + + + + + 瞬时A相有功功率,单位 kw + + + + + 瞬时B相有功功率,单位 kw + + + + + 瞬时C相有功功率,单位 kw + + + + + 瞬时总有功功率,单位 kw + + + + + 瞬时A相无功功率,单位 kvar + + + + + 瞬时B相无功功率,单位 kvar + + + + + 瞬时C相无功功率,单位 kvar + + + + + 瞬时总无功功率,单位 kvar + + + + + 瞬时A相视在功率,单位 kVA + + + + + 瞬时B相视在功率,单位 kVA + + + + + 瞬时C相视在功率,单位 kVA + + + + + 瞬时总视在功率,单位 kVA + + + + + A相功率因数 + + + + + B相功率因数 + + + + + C相功率因数 + + + + + 总功率因数 + + + + + 频率,Hz + + + + + 根据德力西电表的原始字节数据,解析出真实的电量参数信息 + + 原始的字节数据 + 字节变换操作 + 掂量参数信息 + + + + 基于多功能电能表通信协议实现的通讯类,参考的文档是DLT645-2007,主要实现了对电表数据的读取和一些功能方法, + 在点对点模式下,需要在打开串口后调用 方法,数据标识格式为 00-00-00-00,具体参照文档手册。
+ The communication type based on the communication protocol of the multifunctional electric energy meter. + The reference document is DLT645-2007, which mainly realizes the reading of the electric meter data and some functional methods. + In the point-to-point mode, you need to call method after opening the serial port. + the data identification format is 00-00-00-00, refer to the documentation manual for details. +
+ + 如果一对多的模式,地址可以携带地址域访问,例如 "s=2;00-00-00-00",主要使用 方法来读取浮点数, + 方法来读取字符串 + + + 具体的地址请参考相关的手册内容,如果没有,可以联系HSL作者或者,下面列举一些常用的地址
+ 对于电能来说,DI0是结算日的信息,现在的就是写0,上一结算日的就写 01,上12结算日就写 0C + + + DI3 + DI2 + DI1 + DI0 + 地址示例 + 读取方式 + 数据项名称 + 备注 + + + 00 + 00 + 00 + 00 + 00-00-00-00 + ReadDouble + (当前)组合有功总电能(kwh) + 00-00-01-00到00-00-3F-00分别是组合有功费率1~63电能 + + + 00 + 01 + 00 + 00 + 00-01-00-00 + ReadDouble + (当前)正向有功总电能(kwh) + 00-01-01-00到00-01-3F-00分别是正向有功费率1~63电能 + + + 00 + 02 + 00 + 00 + 00-02-00-00 + ReadDouble + (当前)反向有功总电能(kwh) + 00-02-01-00到00-02-3F-00分别是反向有功费率1~63电能 + + + 00 + 03 + 00 + 00 + 00-03-00-00 + ReadDouble + (当前)组合无功总电能(kvarh) + 00-03-01-00到00-03-3F-00分别是组合无功费率1~63电能 + + + 00 + 09 + 00 + 00 + 00-09-00-00 + ReadDouble + (当前)正向视在总电能(kvah) + 00-09-01-00到00-09-3F-00分别是正向视在费率1~63电能 + + + 00 + 0A + 00 + 00 + 00-0A-00-00 + ReadDouble + (当前)反向视在总电能(kvah) + 00-0A-01-00到00-0A-3F-00分别是反向视在费率1~63电能 + + + 02 + 01 + 01 + 00 + 02-01-01-00 + ReadDouble + A相电压(V) + + + + 02 + 01 + 02 + 00 + 02-01-02-00 + ReadDouble + B相电压(V) + + + + 02 + 01 + 03 + 00 + 02-01-03-00 + ReadDouble + C相电压(V) + + + + 02 + 02 + 01 + 00 + 02-02-01-00 + ReadDouble + A相电流(A) + + + + 02 + 02 + 02 + 00 + 02-02-02-00 + ReadDouble + B相电流(A) + + + + 02 + 02 + 03 + 00 + 02-02-03-00 + ReadDouble + C相电流(A) + + + + 02 + 03 + 00 + 00 + 02-03-00-00 + ReadDouble + 瞬时总有功功率(kw) + DI1=1时表示A相,2时表示B相,3时表示C相 + + + 02 + 04 + 00 + 00 + 02-04-00-00 + ReadDouble + 瞬时总无功功率(kvar) + DI1=1时表示A相,2时表示B相,3时表示C相 + + + 02 + 05 + 00 + 00 + 02-05-00-00 + ReadDouble + 瞬时总视在功率(kva) + DI1=1时表示A相,2时表示B相,3时表示C相 + + + 02 + 06 + 00 + 00 + 02-06-00-00 + ReadDouble + 总功率因素 + DI1=1时表示A相,2时表示B相,3时表示C相 + + + 02 + 07 + 01 + 00 + 02-07-01-00 + ReadDouble + A相相角(°) + DI1=1时表示A相,2时表示B相,3时表示C相 + + + 02 + 08 + 01 + 00 + 02-08-01-00 + ReadDouble + A相电压波形失真度(%) + DI1=1时表示A相,2时表示B相,3时表示C相 + + + 02 + 80 + 00 + 01 + 02-80-00-01 + ReadDouble + 零线电流(A) + + + + 02 + 80 + 00 + 02 + 02-80-00-02 + ReadDouble + 电网频率(HZ) + + + + 02 + 80 + 00 + 03 + 02-80-00-03 + ReadDouble + 一分钟有功总平均功率(kw) + + + + 02 + 80 + 00 + 04 + 02-80-00-04 + ReadDouble + 当前有功需量(kw) + + + + 02 + 80 + 00 + 05 + 02-80-00-05 + ReadDouble + 当前无功需量(kvar) + + + + 02 + 80 + 00 + 06 + 02-80-00-06 + ReadDouble + 当前视在需量(kva) + + + + 02 + 80 + 00 + 07 + 02-80-00-07 + ReadDouble + 表内温度(摄氏度) + + + + 02 + 80 + 00 + 08 + 02-80-00-08 + ReadDouble + 时钟电池电压(V) + + + + 02 + 80 + 00 + 09 + 02-80-00-09 + ReadDouble + 停电抄表电池电压(V) + + + + 02 + 80 + 00 + 0A + 02-80-00-0A + ReadDouble + 内部电池工作时间(分钟) + + + + 04 + 00 + 04 + 03 + 04-00-04-03 + ReadString("04-00-04-03", 32) + 资产管理编码 + + + + 04 + 00 + 04 + 0B + 04-00-04-0B + ReadString("04-00-04-0B", 10) + 电表型号 + + + + 04 + 00 + 04 + 0C + 04-00-04-0C + ReadString("04-00-04-0C", 10) + 生产日期 + + + + 直接串口初始化,打开串口,就可以对数据进行读取了,地址如上图所示。 +
+
+ + + 指定地址域,密码,操作者代码来实例化一个对象,密码及操作者代码在写入操作的时候进行验证
+ Specify the address field, password, and operator code to instantiate an object, and the password and operator code are validated during write operations, + which address field is a 12-character BCD code, for example: 149100007290 +
+ 设备的地址信息,是一个12字符的BCD码 + 密码,写入的时候进行验证的信息 + 操作者代码 +
+ + + + + + + + + + + + 激活设备的命令,只发送数据到设备,不等待设备数据返回
+ The command to activate the device, only send data to the device, do not wait for the device data to return +
+ 是否发送成功 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 基于多功能电能表通信协议实现的通讯类,参考的文档是DLT645-2007,主要实现了对电表数据的读取和一些功能方法, + 在点对点模式下,需要在连接后调用 方法,数据标识格式为 00-00-00-00,具体参照文档手册。
+ The communication type based on the communication protocol of the multifunctional electric energy meter. + The reference document is DLT645-2007, which mainly realizes the reading of the electric meter data and some functional methods. + In the point-to-point mode, you need to call method after connect the device. + the data identification format is 00-00-00-00, refer to the documentation manual for details. +
+ + 如果一对多的模式,地址可以携带地址域访问,例如 "s=2;00-00-00-00",主要使用 方法来读取浮点数, + 方法来读取字符串 + + + + +
+ + + 指定IP地址,端口,地址域,密码,操作者代码来实例化一个对象
+ Specify the IP address, port, address field, password, and operator code to instantiate an object +
+ TcpServer的IP地址 + TcpServer的端口 + 设备的站号信息 + 密码,写入的时候进行验证的信息 + 操作者代码 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 基于多功能电能表通信协议实现的通讯类,参考的文档是DLT645-1997,主要实现了对电表数据的读取和一些功能方法,数据标识格式为 B6-11,具体参照文档手册。
+ Based on the communication class implemented by the multi-function energy meter communication protocol, the reference document is DLT645-1997, + which mainly implements the reading of meter data and some functional methods, the data identification format is B6-11, please refer to the document manual for details. +
+ + 如果一对多的模式,地址可以携带地址域访问,例如 "s=2;B6-11",主要使用 方法来读取浮点数, 方法来读取字符串 + + + 具体的地址请参考相关的手册内容,如果没有,可以联系HSL作者或者,下面列举一些常用的地址
+ + + DI1-DI0 + 读取方式 + 数据项名称 + 备注 + + + 90-10 + ReadDouble + (当前)正向有功总电能(kwh) + 90-11至90-1E表示费率1-14的正向有功电能,90-1F表示正向有功电能数据块 + + + 90-20 + ReadDouble + (当前)反向有功总电能(kwh) + 90-21至90-2E表示费率1-14的反向有功电能,90-2F表示反向有功电能数据块 + + + 91-10 + ReadDouble + (当前)正向无功总电能(kvarh) + 91-11至91-1E表示费率1-14的正向无功电能,91-1F表示正向无功电能数据块 + + + 91-20 + ReadDouble + (当前)反向无功总电能(kvarh) + 91-21至91-2E表示费率1-14的反向无功电能,91-2F表示正向无功电能数据块 + + + A0-10 + ReadDouble + (当前)正向有功总最大需量( kw) + A0-11至A0-1E表示费率1-14的正向有功最大需,A0-1F表示有功最大需量数据块 + + + A0-20 + ReadDouble + (当前)反向有功总最大需量( kw) + A0-21至A0-2E表示费率1-14的反向有功最大需,A0-2F表示反向有功最大需量数据块 + + + A1-10 + ReadDouble + (当前)正向无功总最大需量( kvar) + A1-11至A1-1E表示费率1-14的正向无功最大需,A1-1F表示无功最大需量数据块 + + + A1-20 + ReadDouble + (当前)反向无功总最大需量( kvar) + A1-21至A1-2E表示费率1-14的反向无功最大需,A1-2F表示反向无功最大需量数据块 + + + B2-10 + ReadString + 最近一次编程时间 + 单位月日小时分钟,MMDDHHmm + + + B2-12 + ReadDouble + 编程次数 + + + + B2-14 + ReadDouble + 电池工作时间(min) + + + + B3-10 + ReadDouble + 总断相次数 + B3-11至B3-13分别表示A相,B相,C相 + + + B3-20 + ReadDouble + 断相时间累计值(min) + B3-21至B3-23分别表示A相,B相,C相 + + + B6-11 + ReadDouble + A相电压(V) + + + + B6-12 + ReadDouble + B相电压(V) + + + + B6-13 + ReadDouble + C相电压(V) + + + + B6-21 + ReadDouble + A相电流(A) + + + + B6-22 + ReadDouble + B相电流(A) + + + + B6-23 + ReadDouble + C相电流(A) + + + + B6-30 + ReadDouble + 瞬时有功功率(kw) + B6-31至B6-33分别表示A相,B相,C相 + + + B6-40 + ReadDouble + 瞬时无功功率(kvarh) + B6-41至B6-43分别表示A相,B相,C相 + + + B6-50 + ReadDouble + 总功率因数 + B6-41至B6-43分别表示A相,B相,C相 + + + C0-10 + ReadString + 日期及周次 + 年月日,YYMMDDWW + + + C0-11 + ReadString + 时间 + 时分秒,hhmmss + + + C0-30 + ReadString + 电表常数(有功) + p/(kwh) + + + C0-31 + ReadString + 电表常数(无功) + p/(kvarh) + + + C0-32 + ReadString + 表号 + + + + C0-33 + ReadString + 用户号 + + + + C0-34 + ReadString + 设备码 + + + + C1-12 + ReadDouble + 滑差时间(s) + + + + C1-13 + ReadDouble + 循显时间(s) + + + + C1-14 + ReadDouble + 停显时间(s) + + + + C1-15 + ReadDouble + 显示电能小数位数 + + + + C1-17 + ReadString + 自动抄表日期 + 日时,DDhh + + +
+
+ + + 通过指定的站号实例化一个设备对象 + + 设备的地址信息,是一个12字符的BCD码 + + + + + + + + + + + + + 激活设备的命令,只发送数据到设备,不等待设备数据返回
+ The command to activate the device, only send data to the device, do not wait for the device data to return +
+ 是否发送成功 +
+ + + 根据指定的数据标识来读取相关的原始数据信息,地址标识根据手册来,从高位到地位,例如 B6-11,分割符可以任意特殊字符或是没有分隔符。
+ Read the relevant original data information according to the specified data identifier. The address identifier is based on the manual, + from high to position, such as B6-11. The separator can be any special character or no separator. +
+ + 地址可以携带地址域信息,例如 "s=2;B6-11" 或是 "s=100000;B6-11",关于数据域信息,需要查找手册,例如:B6-30 表示: (当前)正向有功总电能 + + 数据标识,具体需要查找手册来对应 + 数据长度信息 + 结果信息 +
+ + + + 地址可以携带地址域信息,例如 "s=2;B6-11" 或是 "s=100000;B6-11",关于数据域信息,需要查找手册,例如:B6-30 表示: 瞬时有功功率 + + + + + + 地址可以携带地址域信息,例如 "s=2;B6-11" 或是 "s=100000;B6-11",关于数据域信息,需要查找手册,例如:B6-30 表示: (当前)正向有功总电能 + + + + + 读取指定地址的所有的字符串数据信息,一般来说,一个地址只有一个数据 + + + 地址可以携带地址域信息,例如 "s=2;B6-11" 或是 "s=100000;B6-11",关于数据域信息,需要查找手册,例如:B6-30 表示: 瞬时有功功率 + + 数据标识,具体需要查找手册来对应 + 字符串数组信息 + + + + + + + + + + 根据指定的数据标识来写入相关的原始数据信息,地址标识根据手册来,从高位到地位,例如 B6-34(正向有功功率上限值),分割符可以任意特殊字符或是没有分隔符。
+ Read the relevant original data information according to the specified data identifier. The address identifier is based on the manual, + from high to position, such as B6-34. The separator can be any special character or no separator. +
+ + 地址可以携带地址域信息,例如 "s=2;B6-34" 或是 "s=100000;B6-34",关于数据域信息,需要查找手册,例如:B6-30 表示: 瞬时有功功率
+
+ 地址信息 + 写入的数据值 + 是否写入成功 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 基于多功能电能表通信协议实现的通讯类,参考的文档是DLT645-1997,主要实现了对电表数据的读取和一些功能方法,数据标识格式为 B6-11,具体参照文档手册。
+ Based on the communication class implemented by the multi-function energy meter communication protocol, the reference document is DLT645-1997, + which mainly implements the reading of meter data and some functional methods, the data identification format is B6-11, please refer to the document manual for details. +
+ + 如果一对多的模式,地址可以携带地址域访问,例如 "s=2;B6-11",主要使用 方法来读取浮点数, 方法来读取字符串 + + + + +
+ + + 指定IP地址,端口,地址域来实例化一个对象
+ Specify the IP address, port, address field, password, and operator code to instantiate an object +
+ TcpServer的IP地址 + TcpServer的端口 + 设备的站号信息 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 698.45协议的串口通信类,面向对象的用电信息数据交换协议,使用明文的通信方式。支持读取功率,总功,电压,电流,频率,功率因数等数据。
+ The serial communication class of the 698.45 protocol, an object-oriented power consumption information data exchange protocol, + uses the communication method of clear text. Support reading power, total power, voltage, current, frequency, power factor and other data. +
+ + 如果不知道表的地址,可以使用方法来获取表的地址,读取的数据地址使用 OAD 的标识方式,具体可以参照api文档
+ If you don't know the address of the table, you can use the method to get the address of the table, + and the read data address uses the OAD identification method. For details, please refer to the api documentation. +
+ + 具体的地址请参考相关的手册内容,如果没有,可以联系HSL作者或者参考下面列举一些常用的地址
+ 支持的地址即为 OAD 的对象ID信息,该对象需要三个数据标记,分别是
+ + 1. 对象标识 ushort 类型 + 2. 属性标识 byte 类型, 0:所有属性,1:类型属性,2:值属性,3:单位及倍率 + 3. 属性内元素索引,00:元素的全部内容,如果是数组或是结构体,01指向属性的第一个元素 + + 那么好办了,例如 20-00-02-00 使用 ReadDouble("20-00-02-00", 3) 就是读三个电压,如果只读电压B,那么就是 ReadDouble("20-00-02-02")
+ 其他的地址参考下面的列表说明 + + + 地址示例 + 读取方式 + 数据项名称 + 备注 + + + 00-00-02-00 + ReadDouble + 组合有功总电能(kwh) + 返回长度5的数组 + + + 00-10-02-00 + ReadDouble + 正向有功总电能(kwh) + 返回长度5的数组 + + + 00-20-02-00 + ReadDouble + 反向有功总电能(kwh) + 返回长度5的数组 + + + 00-30-02-00 + ReadDouble + 组合无功1总电能(kwh) + 返回长度5的数组 + + + 00-40-02-00 + ReadDouble + 组合无功2总电能(kwh) + 返回长度5的数组 + + + 10-00-02-00 + ReadDouble + 当前组合有功总电能(kwh) + 返回长度5的数组 + + + 10-10-02-00 + ReadDouble + 当前正向有功总电能(kwh) + 返回长度5的数组 + + + 10-20-02-00 + ReadDouble + 当前反向有功总电能(kwh) + 返回长度5的数组 + + + 10-30-02-00 + ReadDouble + 当前组合无功1总电能(kwh) + 返回长度5的数组 + + + 10-40-02-00 + ReadDouble + 当前组合无功2总电能(kwh) + 返回长度5的数组 + + + 20-00-02-00 + ReadDouble + 电压(v) + 电压A,电压B,电压C + + + 20-01-02-00 + ReadDouble + 电流(A) + 电流A, 电流B,电流C分别 20-01-02-01 到 20-01-02-03 + + + 20-02-02-00 + ReadDouble + 电压相角(度) + 相角A,相角B,相角C,分别20-02-02-01 到 20-02-02-03 + + + 20-03-02-00 + ReadDouble + 电压电流相角(度) + 相角A,相角B,相角C,分别20-03-02-01 到 20-03-02-03 + + + 20-04-02-00 + ReadDouble + 有功功率(W 瓦) + + + + 20-05-02-00 + ReadDouble + 无功功率(Var) + + + + 20-06-02-00 + ReadDouble + 视在功率(VA) + + + + 20-07-02-00 + ReadDouble + 一分钟平均有功功率(W) + + + + 20-08-02-00 + ReadDouble + 一分钟平均无功功率(var) + + + + 20-09-02-00 + ReadDouble + 一分钟视在无功功率(VA) + + + + 20-0A-02-00 + ReadDouble + 功率因数 + + + + 20-0F-02-00 + ReadDouble + 电网频率(Hz) + + + + 20-10-02-00 + ReadDouble + 表内温度(摄氏度) + + + + 20-11-02-00 + ReadDouble + 时钟电池电压(V) + + + + 20-12-02-00 + ReadDouble + 停电抄表电池电压(V) + + + + 20-13-02-00 + ReadDouble + 时钟电池工作时间(分钟) + + + + 20-14-02-00 + ReadStringArray + 电能表运行状态字 + 共计7组数据,每组16个位 + + + 20-15-02-00 + ReadStringArray + 电能表跟随上报状态字 + 共计32个位 + + + 20-17-02-00 + ReadDouble + 当前有功需量(kw) + + + + 20-18-02-00 + ReadDouble + 当前无功需量(kvar) + + + + 20-19-02-00 + ReadDouble + 当前视在需量(kva) + + + + 20-26-02-00 + ReadDouble + 电压不平衡率(百分比) + + + + 20-27-02-00 + ReadDouble + 电流不平衡率(百分比) + + + + 20-29-02-00 + ReadDouble + 负载率(百分比) + + + + 40-00-02-00 + ReadString + 日期时间 + + + + 40-01-02-00 + ReadString + 通信地址 + + + + 40-02-02-00 + ReadString + 表号 + + + + 40-03-02-00 + ReadString + 客户编号 + + + + 40-04-02-00 + ReadString + 设备地理坐标 + + + + 41-00-02-00 + ReadDouble + 最大需量周期(分钟) + + + + 41-01-02-00 + ReadDouble + 滑差时间(分钟) + + + + 41-02-02-00 + ReadDouble + 校表脉冲宽度(毫秒) + + + + 41-03-02-00 + ReadString + 资产管理码 + + + + 41-04-02-00 + ReadString + 额定电压(V) + + + + 41-05-02-00 + ReadString + 额定电流/基本电流 + + + + 41-06-02-00 + ReadString + 最大电流 + + + + 41-07-02-00 + ReadString + 有功准确度等级 + + + + 41-08-02-00 + ReadString + 无功准确度等级 + + + + 41-09-02-00 + ReadString + 电能表有功常数(imp/kWh) + + + + 41-0A-02-00 + ReadString + 电能表无功常数(imp/kWh) + + + + 41-0B-02-00 + ReadString + 电能表型号 + + + + 直接串口初始化,打开串口,就可以对数据进行读取了,地址如上图所示。 +
+
+ + + 指定地址域来实例化一个对象,密码及操作者代码在写入操作的时候进行验证
+ Specify the address field to instantiate an object, and the password and operator code are validated during write operations, + which address field is a 12-character BCD code, for example: 149100007290 +
+ 设备的地址信息,通常是一个12字符的BCD码 +
+ + + + + + + + + + + + + + + 获取或设置是否使用安全的请求模式,对于有些仪表来说,不支持使用安全的模式,就需要设置为False
+ Get or set whether to use the secure request mode, for some meters, the safe mode is not supported, so you need to set it to False. +
+
+ + + 根据传入的APDU的命令读取原始的字节数据返回 + + apdu报文信息 + 原始字节数据信息 + + + + 激活设备的命令,只发送数据到设备,不等待设备数据返回
+ The command to activate the device, only send data to the device, do not wait for the device data to return +
+ 是否发送成功 +
+ + + 根据指定的数据标识来读取相关的原始数据信息,地址标识根据手册来,从高位到地位,例如 00-00-00-00,分割符可以任意特殊字符或是没有分隔符。
+ Read the relevant original data information according to the specified data identifier. The address identifier is based on the manual, + from high to position, such as 00-00-00-00. The separator can be any special character or no separator. +
+ + 地址可以携带地址域信息,例如 "s=2;00-00-00-00" 或是 "s=100000;00-00-02-00",关于数据域信息,需要查找手册,例如:00-01-00-00 表示: (当前)正向有功总电能 + + 数据标识,具体需要查找手册来对应 + 数据长度信息 + 结果信息 +
+ + + 读取指定地址的所有的字符串数据信息,一般来说,一个地址只有一个数据,当属性为数组或是结构体的时候,存在多个数据,具体几个数据,需要根据 + + + 地址可以携带地址域信息,例如 "s=2;20-00-02-00" 或是 "s=100000;20-00-02-00", + + 数据标识,具体需要查找手册来对应 + 字符串数组信息 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 根据指定的数据标识来写入相关的原始数据信息,地址标识根据手册来,从高位到地位,例如 00-00-00-00,分割符可以任意特殊字符或是没有分隔符。
+ Read the relevant original data information according to the specified data identifier. The address identifier is based on the manual, + from high to position, such as 00-00-00-00. The separator can be any special character or no separator. +
+ + 写入数据的时候,需要使用类型+值信息,例如写入地址 40-00-02-00 值为 1C 07 E0 01 14 10 1B 0B 表示 时间:2016-01-20 16:27:11 + + 地址信息 + 写入的数据值 + 是否写入成功 +
+ + + 读取设备的通信地址,仅支持点对点通讯的情况,返回地址域数据,例如:149100007290
+ Read the communication address of the device, only support point-to-point communication, and return the address field data, for example: 149100007290 +
+ 设备的通信地址 +
+ + + 写入设备的地址域信息,仅支持点对点通讯的情况,需要指定地址域信息,例如:149100007290
+ Write the address domain information of the device, only support point-to-point communication, + you need to specify the address domain information, for example: 149100007290 +
+ 等待写入的地址域 + 是否写入成功 +
+ + + 写入设备的时间信息到指定的地址,返回是否成功,使用的时间类型为 0x1C, 有效数据为 年月日时分秒。
+ Write the time information of the device to the specified address, return whether it is successful, the time type used is 0x1C, and the valid data is year, month, day, hour, minute, and second. +
+ 写入的地址的信息 + 时间数据 + 是否写入成功 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 获取或设置当前的地址域信息,是一个12个字符的BCD码,例如:149100007290
+ Get or set the current address domain information, which is a 12-character BCD code, for example: 149100007290 +
+
+ + + + + + + + + 根据地址类型,逻辑地址,实际的地址信息构建出真实的地址报文 + + 地址类型,0:单地址, 1:通配地址,2:组地址,3:广播地址 + 逻辑地址 + 地址信息 + 客户机地址 + 原始字节信息 + + + + 将指定的地址信息,控制码信息,数据域信息打包成完整的报文命令 + + 控制码信息 + 服务器的地址 + 客户机地址 + 链路用户数据 + 返回是否报文创建成功 + + + + 构建读取单个对象的报文数据 + + 数据地址信息 + 站号信息 + 是否使用安全的通信机制 + 单次读取的报文信息 + + + + 构建单个写得对象的数据操作 + + 数据地址信息 + 站号信息 + 数据信息 + 是否使用安全的通信机制 + 最终报文 + + + + 检查当前的反馈数据信息是否正确 + + 从仪表反馈的数据信息 + 是否校验成功 + + + + 根据错误代码返回详细的错误文本消息 + + 错误代码 + 错误文本消息 + + + + 698.45协议的串口转网口透传通信类(不是TCP通信),面向对象的用电信息数据交换协议,使用明文的通信方式。支持读取功率,总功,电压,电流,频率,功率因数等数据。
+ 698.45 protocol serial port to network port transparent transmission communication (not TCP communication), + object-oriented power consumption information data exchange protocol, using plaintext communication. Support reading power, + total power, voltage, current, frequency, power factor and other data. +
+ + + + + + /// +
+ + + 指定地址域,密码,操作者代码来实例化一个对象,密码及操作者代码在写入操作的时候进行验证
+ Specify the address field, password, and operator code to instantiate an object, and the password and operator code are validated during write operations, + which address field is a 12-character BCD code, for example: 149100007290 +
+ 设备的地址信息,通常是一个12字符的BCD码 +
+ + + 通过指定IP地址,端口号,设备站号来初始化一个通信对象信息 + + IP地址信息 + 端口号信息 + 设备站号信息 + + + + + + + + + + + + + 根据指定的数据标识来读取相关的原始数据信息,地址标识根据手册来,从高位到地位,例如 00-00-00-00,分割符可以任意特殊字符或是没有分隔符。
+ Read the relevant original data information according to the specified data identifier. The address identifier is based on the manual, + from high to position, such as 00-00-00-00. The separator can be any special character or no separator. +
+ + 地址可以携带地址域信息,例如 "s=2;00-00-00-00" 或是 "s=100000;00-00-02-00",关于数据域信息,需要查找手册,例如:00-01-00-00 表示: (当前)正向有功总电能 + + 数据标识,具体需要查找手册来对应 + 数据长度信息 + 结果信息 +
+ + + + + + + + + + + + + + + + + + 根据传入的APDU的命令读取原始的字节数据返回 + + apdu报文信息 + 原始字节数据信息 + + + + 激活设备的命令,只发送数据到设备,不等待设备数据返回
+ The command to activate the device, only send data to the device, do not wait for the device data to return +
+ 是否发送成功 +
+ + + 读取指定地址的所有的字符串数据信息,一般来说,一个地址只有一个数据,当属性为数组或是结构体的时候,存在多个数据,具体几个数据,需要根据 + + + 地址可以携带地址域信息,例如 "s=2;20-00-02-00" 或是 "s=100000;20-00-02-00", + + 数据标识,具体需要查找手册来对应 + 字符串数组信息 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 获取或设置当前的地址域信息,是一个12个字符的BCD码,例如:149100007290
+ Get or set the current address domain information, which is a 12-character BCD code, for example: 149100007290 +
+
+ + + + + + + + + 698.45协议的TCP通信类(不是串口透传通信),面向对象的用电信息数据交换协议,使用明文的通信方式。支持读取功率,总功,电压,电流,频率,功率因数等数据。
+ The TCP communication class of the 698.45 protocol (not the serial port transparent transmission communication), the object-oriented power consumption information data exchange protocol, + uses the clear text communication method. Support reading power, total power, voltage, current, frequency, power factor and other data. +
+ + + + + + +
+ + + 指定地址域,密码,操作者代码来实例化一个对象,密码及操作者代码在写入操作的时候进行验证
+ Specify the address field, password, and operator code to instantiate an object, and the password and operator code are validated during write operations, + which address field is a 12-character BCD code, for example: 149100007290 +
+ 设备的地址信息,通常是一个12字符的BCD码 +
+ + + + + + + + + + + + + + + 基本的控制码信息 + + + + + 保留 + + + + + 广播 + + + + + 读数据 + + + + + 读后续数据 + + + + + 读通信地址 + + + + + 写数据 + + + + + 写通信地址 + + + + + 冻结命令 + + + + + 更改通信速率 + + + + + 修改密码 + + + + + 最大需求量清零 + + + + + 电表清零 + + + + + 事件清零 + + + + + 跳合闸、报警、保电 + + + + + 多功能端子输出控制命令 + + + + + 安全认证命令 + + + + + 保留 + + + + + 读数据 + + + + + 读后续数据 + + + + + 重读数据 + + + + + 写数据 + + + + + 广播校时 + + + + + 写设备地址 + + + + + 更改通信速率 + + + + + 修改密码 + + + + + 最大需量清零 + + + + + DTL数据转换 + + + + + Byte[]转ToHexString + + 原始的字节内容 + 长度信息 + 字符串的结果信息 + + + + + + + 将字符串数据,转变为实际的等待写入的数据信息 + + DLT类型 + 字符串数据信息 + 数据ID信息 + 数据是否反转 + 原始数据信息 + + + + 从读取的原始字节里解析出实际的字符串数组 + + 类型信息 + 原始字节内容 + 地址信息 + 指示当前的结果数据是否发生数据反转的操作 + 字符串的数组内容 + + + + Byte[]转Dlt double[],使用一样的 format 格式来转换多个double类型的数据 + + 原始的字节数据 + 需要转换的数据长度 + 当前数据的解析格式 + 结果内容 + + + + 根据不同的数据地址,返回实际的数据格式,然后解析出正确的数据 + + 数据标识地址,实际的byte数组,地位在前,高位在后 + 实际的数据格式信息 + + + + DLT645/1997的地址参数数据格式 + + 地址域 + 数据信息 + + + + DLT645相关的辅助类 + + + + + 将地址解析成BCD码的地址,并且扩充到12位,不够的补0操作 + + 地址域信息 + 实际的结果 + + + + 将指定的地址信息,控制码信息,数据域信息打包成完整的报文命令 + + 地址域信息,地址域由6个字节构成,每字节2位BCD码,地址长度可达12位十进制数。地址域支持锁位寻址,即从若干低位起,剩余高位补AAH作为通配符进行读表操作 + 控制码信息 + 数据域的内容 + 返回是否报文创建成功 + + + + 检查设备返回的报文信息,是否校验码确认通过 + + 设备返回的报文 + 起始校验的索引 + 是否校验成功 + + + + 从用户输入的地址信息中解析出真实的地址及数据标识 + + DLT的类型 + 用户输入的地址信息 + 默认的地址域 + 数据长度信息 + 解析结果信息 + + + + 从用户输入的地址信息中解析出真实的地址及数据标识 + + 用户输入的地址信息 + 默认的地址域 + 解析结果信息 + + + + 检查当前的DLT仪表设备反馈数据信息是否正确 + + DLT通信设备 + 从仪表反馈的数据信息 + 是否校验成功 + + + + 寻找0x68字节开头的位置信息 + + 缓存数据 + 如果有则为索引位置,如果没有则为空 + + + + 根据指定的数据标识来读取相关的原始数据信息,地址标识根据手册来,从高位到地位,例如 00-00-00-00,分割符可以任意特殊字符或是没有分隔符。
+ Read the relevant original data information according to the specified data identifier. The address identifier is based on the manual, + from high to position, such as 00-00-00-00. The separator can be any special character or no separator. +
+ + 地址可以携带地址域信息,例如 "s=2;00-00-00-00" 或是 "s=100000;00-00-02-00",关于数据域信息,需要查找手册,例如:00-01-00-00 表示: (当前)正向有功总电能 + + DLT通信对象 + 数据标识,具体需要查找手册来对应 + 数据长度信息 + 结果信息 +
+ + + 读取指定地址的所有的字符串数据信息,一般来说,一个地址只有一个数据,但是少部分的地址存在多个数据,例如 01-01-00-00 正向有功总需求及发生时间
+ Read all the string data information of the specified address, in general, there is only one data for one address, but there are multiple data for a small number of addresses, + such as 01-01-00-00 Forward active total demand and occurrence time +
+ + 地址可以携带地址域信息,例如 "s=2;00-00-00-00" 或是 "s=100000;00-00-02-00",关于数据域信息,需要查找手册,例如:00-01-00-00 表示: (当前)正向有功总电能
+ 地址也可以携带是否数据翻转的标记,例如 "reverse=false;00-00-00-00" 解析数据的时候就不发生反转的操作 +
+ DLT通信对象 + 数据标识,具体需要查找手册来对应 + 字符串数组信息 +
+ + + 读取指定地址的所有的double数据信息,一般来说,一个地址只有一个数据,但是少部分的地址存在多个数据,然后全部转换为double数据信息
+ Read all the double data information of the specified address, in general, an address has only one data, but a small number of addresses exist multiple data, + and then all converted to double data information +
+ + 地址可以携带地址域信息,例如 "s=2;00-00-00-00" 或是 "s=100000;00-00-02-00",关于数据域信息,需要查找手册,例如:00-01-00-00 表示: (当前)正向有功总电能
+ 地址也可以携带是否数据翻转的标记,例如 "reverse=false;00-00-00-00" 解析数据的时候就不发生反转的操作 +
+ DLT通信对象 + 数据标识,具体需要查找手册来对应 + 读取的数据长度信息 +
+ + + 根据指定的数据标识来写入相关的原始数据信息,地址标识根据手册来,从高位到地位,例如 00-00-00-00,分割符可以任意特殊字符或是没有分隔符。
+ Read the relevant original data information according to the specified data identifier. The address identifier is based on the manual, + from high to position, such as 00-00-00-00. The separator can be any special character or no separator. +
+ + 地址可以携带地址域信息,例如 "s=2;00-00-00-00" 或是 "s=100000;00-00-02-00",关于数据域信息,需要查找手册,例如:00-01-00-00 表示: (当前)正向有功总电能
+ 注意:本命令必须与编程键配合使用 +
+ DLT通信对象 + 密钥信息 + 操作者代码 + 地址信息 + 写入的数据值 + 是否写入成功 +
+ + + 将指定的数据写入到仪表中,,地址标识根据手册来,从高位到地位,例如 00-00-00-00,分割符可以任意特殊字符或是没有分隔符。
+ Write the data to the gauge, address identification according to the manual, from high bit to position, + such as 00-00-00-00, the separator can be any special character or no delimiter. +
+ DLT通信对象 + 密钥信息 + 操作者代码 + 地址信息 + 写入的数据值 + 是否写入成功的结果对象 +
+ + + 读取设备的通信地址,仅支持点对点通讯的情况,返回地址域数据,例如:149100007290
+ Read the communication address of the device, only support point-to-point communication, and return the address field data, for example: 149100007290 +
+ DLT通信对象 + 设备的通信地址 +
+ + + 写入设备的地址域信息,仅支持点对点通讯的情况,需要指定地址域信息,例如:149100007290
+ Write the address domain information of the device, only support point-to-point communication, + you need to specify the address domain information, for example: 149100007290 +
+ DLT通信对象 + 等待写入的地址域 + 是否写入成功 +
+ + + 广播指定的时间,强制从站与主站时间同步,传入时间对象,没有数据返回。
+ Broadcast the specified time, force the slave station to synchronize with the master station time, + pass in the time object, and no data will be returned. +
+ DLT通信对象 + 时间对象 + 是否成功 +
+ + + 对设备发送冻结命令,默认点对点操作,地址域为 99999999999999 时为广播,数据域格式说明:MMDDhhmm(月日时分), + 99DDhhmm表示月为周期定时冻结,9999hhmm表示日为周期定时冻结,999999mm表示以小时为周期定时冻结,99999999表示瞬时冻结
+ Send a freeze command to the device, the default point-to-point operation, when the address field is 9999999999999, + it is broadcast, and the data field format description: MMDDhhmm (month, day, hour and minute), + 99DDhhmm means the month is the periodic fixed freeze, 9999hhmm means the day is the periodic periodic freeze, + and 999999mm means the hour It is periodic timed freezing, 99999999 means instantaneous freezing +
+ DLT通信对象 + 数据域信息 + 是否成功冻结 +
+ + + 更改通信速率,波特率可选 600,1200,2400,4800,9600,19200,其他值无效,可以携带地址域信息,s=1;9600
+ Change the communication rate, the baud rate can be 600, 1200, 2400, 4800, 9600, 19200, + other values are invalid, you can carry address domain information, s=1;9600 +
+ + 对于DLT1997来说,只支持 300, 600, 2400, 4800, 9600 + + DLT通信对象 + 波特率的信息 + 是否更改成功 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DLT645的类型 + + + + + DLT645/1997 版本 + + + + + DLT645/2007 版本 + + + + + 校验部分的辅助方法 + + + + + 根据传入的原始字节数组,来计算当前的部分字节的FCS校验数据,并返回最终校验结果 + + 等待计算校验的字节缓存 + 开始计算的字节索引 + 等待计算的字节的长度 + 最终计算的Fcs结果 + + + + 验证当前的Fcs校验码是否正确,长度信息参数不应该包含FCS校验字节信息 + + 等待计算校验的字节缓存 + 开始计算的字节索引 + 等待计算的字节的长度,不包含FCS字节 + 是否计算符合的结果 + + + + 698 协议的帮助类 + + + + + 预连接请求 + + + + + 建立应用连接请求 + + + + + 断开应用连接请求 + + + + + 读取请求 + + + + + 设置请求 + + + + + 操作请求 + + + + + 操作请求 + + + + + 代理请求 + + + + + 安全请求 + + + + + 预连接响应 + + + + + 建立应用连接响应 + + + + + 断开应用连接响应 + + + + + 断开应用连接通知 + + + + + 读取响应 + + + + + 设置响应 + + + + + 操作响应 + + + + + 上报通知 + + + + + 代理响应 + + + + + 安全响应 + + + + + DLT645的接口实现 + + + + + 获取或设置当前的地址域信息,是一个12个字符的BCD码,例如:149100007290
+ Get or set the current address domain information, which is a 12-character BCD code, for example: 149100007290 +
+
+ + + 获取或设置是否在每一次的报文通信时,增加"FE FE FE FE"的命令头
+ Get or set whether to add the command header of "FE FE FE FE" in each message communication +
+
+ + + 获取当前的DLT645的类型信息
+ Gets the type information of the current DLT645 +
+
+ + + 获取或设置当前DLT645的密码,当进行写入数据操作的时候,需要正确的密码才能写入
+ Obtain or set the password of the current DLT645, and the correct password is required to write data operations +
+ + 对于 DLT645/1997 协议来说无效 + +
+ + + 获取或设置当前DLT645的操作者代码,当进行写入数据操作的时候,需要指定正确的值
+ Obtain or set the operator code of the current DLT645, and specify the correct value when writing data +
+ + 对于 DLT645/1997 协议来说无效 + +
+ + + + + + + + + + + + + + + + + + + + + DLT698的接口实现 + + + + + 获取或设置当前的地址域信息,是一个12个字符的BCD码,例如:149100007290
+ Get or set the current address domain information, which is a 12-character BCD code, for example: 149100007290 +
+
+ + + 获取或设置是否在每一次的报文通信时,增加"FE FE FE FE"的命令头
+ Get or set whether to add the command header of "FE FE FE FE" in each message communication +
+
+ + + + + + + + + + + + + + + + + + IEC协议的辅助类信息 + + + + + 将IEC104的报文打包成完整的IEC104标准的协议报文 + + 控制域1 + 控制域2 + 控制域3 + 控制域4 + ASDU报文,包含类型标识,可变结构限定词,传送原因,应用服务器数据单元公共地址,信息体 + 完整的报文消息 + + + + 根据给定的时间,获取绝对时标的报文数据信息 + + 时间信息 + 时标是否有效 + 可用于发送的绝对时标的报文 + + + + 根据给定的绝对时标的原始内容,解析出实际的时间信息。 + + 原始字节 + 数据的偏移索引 + 时间信息 + + + + 构建一个S帧协议的内容,需要传入接收需要信息 + + 接收序号信息 + S帧协议的报文信息 + + + + 构建一个U帧消息的报文信息,传入功能码,STARTDT: 0x07, STOPDT: 0x13; TESTFR: 0x43 + + 控制码信息 + U帧的报文信息 + + + + 构建一个I帧消息的报文信息,传入相关的参数信息,返回完整的104消息报文 + + 发送的序列号 + 接收的序列号 + 类型标识 + 可变结构限定词 + 传送原因 + 应用服务数据单元公共地址 + 信息体,最大243个字节的长度 + 用于发送的104报文信息 + + + + U帧协议里,启动的功能 + + + + + U帧协议里,停止的功能 + + + + + U帧协议里,测试的功能,主站和子站均可发出 + + + + + 构建写入IEC仪表的报文信息 + + 指令类型信息 + 原因信息 + 地址信息 + 值数据 + 发送仪表的报文 + + + + 解析遥信值的方法 + + IEC104的消息 + 从实际的字节数据转换指定类型的方法 + 数据类型的字节长度信息 + 转换后的类型信息 + 列表值 + + + + IEC104规约实现的电力协议,支持总召唤,支持回调任意的 + + + 手动绑定事件 ,当收到设备的数据时就可以触发,如果需要总召唤,调用方法 + + + 一般来说,实例化之后,绑定事件,连接即可,然后定时调用总召唤(定时调用时还可以判断是否连接成功) + + 当然可以使用hsl辅助解析数据 + + + + + + 实例化IEC104协议的通讯对象
+ Instantiate the communication object of the IEC104 protocol +
+
+ + + 指定ip地址和端口号来实例化一个默认的对象
+ Specify the IP address and port number to instantiate a default object +
+ IEC104的Ip地址 + IEC104的端口, 默认是2404端口 +
+ + + + + + + + + + + + + + + + + + + + + + + + 指定类型标识,传送原因,数据地址,数据值信息来写入到IEC的仪表中去 + + 类型标识 + 传送原因 + 数据地址 + 值信息 + 是否发送到仪表成功 + + + + + + + 以I消息的格式发送传入的原始字节数据,传入的消息为asdu信息 + + ASDU报文信息 + 是否发送成功 + + + + 向设备发送U帧消息的报文信息,传入功能码,STARTDT: 0x07, STOPDT: 0x13; TESTFR: 0x43 + + 功能码,STARTDT: 0x07, STOPDT: 0x13; TESTFR: 0x43 + 是否发送成功 + + + + 总召唤,支持设置总召唤代码,0x01: 定时主动上送, 0x14: 相应总召唤上送, 0x03: 越限上送 + + 总召唤的代码,0x01: 定时主动上送, 0x14: 相应总召唤上送, 0x03: 越限上送 + 是否召唤成功 + + + + 当接收到了IEC104的消息触发的事件 + + + + + + + + 类型信息资源 + + + + + 单点遥信,带品质描述,不带时标 + + + + + 双点遥信,带品质描述,不带时标 + + + + + 步位置信息,带品质描述,不带时标 + + + + + 32比特串,带品质描述,不带时标 + + + + + 归一化遥测值,带品质描述,不带时标 + + + + + 标度化遥测值,带品质描述,不带时标 + + + + + 短浮点遥测值,带品质描述,不带时标 + + + + + 累计量,带品质描述,不带时标 + + + + + 成组单点遥信,只带变位标志 + + + + + 归一化遥测值,不带品质描述,不带时标 + + + + + 单点遥信,带品质描述,带绝对时标 + + + + + 双点遥信,带品质描述,带绝对时标 + + + + + 步位置信息,带品质描述,带绝对时标 + + + + + 32比特串,带品质描述,带绝对时标 + + + + + 归一化遥测值,带品质描述,带绝对时标 + + + + + 标度化遥测值,带品质描述,带绝对时标 + + + + + 短浮点遥测值,带品质描述,带绝对时标 + + + + + 累计量,带品质描述,带绝对时标 + + + + + 单点遥控,一个报文只有一个遥控信息体,不带时标 + + + + + 双点遥控,一个报文只有一个遥控信息体,不带时标 + + + + + 升降遥控,一个报文只有一个遥控信息体,不带时标 + + + + + 归一化设定值,一个报文只有一个设定值,不带时标 + + + + + 标度化设定值,一个报文只有一个设定值,不带时标 + + + + + 短浮点设定值,一个报文只有一个设定值,不带时标 + + + + + 32比特串设定,一个报文只有一个设定值,不带时标 + + + + + 单点遥控,一个报文只有一个遥控信息体,带时标 + + + + + 双点遥控,一个报文只有一个遥控信息体,带时标 + + + + + 升降遥控,一个报文只有一个遥控信息体,带时标 + + + + + 归一化设定值,一个报文只有一个设定值,带时标 + + + + + 标度化设定值,一个报文只有一个设定值,带时标 + + + + + 短浮点设定值,一个报文只有一个设定值,带时标 + + + + + 32比特串设定,一个报文只有一个设定值,带时标 + + + + + 归一化设定值,一个报文可以包含多个设定值,不带时标 + + + + + 初始化结束,报告厂站初始化完成 + + + + + 总召唤,带不同的限定词可以用于组召唤 + + + + + 累计量召唤,带不同的限定词可以用于组召唤 + + + + + 读命令,读取单个的信息对象值 + + + + + 时钟同步命令,需要通过测量通道延迟加以校正 + + + + + 复位进程命令,使用前需要双方验证 + + + + + 带时标的测试命令 + + + + + IEC104的消息事件 + + + + + 指定asdu消息进行实例化一个对象 + + asdu报文 + + + + 获取或设置当前的asdu信息 + + + + + 类型标识 + + + + + 地址是否连续 + + + + + 信息对象个数 + + + + + 传送原因 + + + + + 站地址 + + + + + 信息体 + + + + + 获取在传送原因的文本描述信息 + + 字符串值 + + + + 获取当前类型的文本描述信息 + + 文本值 + + + + 获取当前的消息是否带时标信息 + + + + + + + + + IEC的数据对象,带值,品质信息,地址信息,时标信息 + + 数据的类型 + + + + 值信息 + + + + + 品质数据 + + + + + 时间信息,对于不带绝对时标的则无效 + + + + + 地址 + + + + + 解析不连续的遥信值的方法,对于返回的 byte 类型的指,单点遥信:0 开,1合、双点遥信: 1开,2合,0和3不确定状态或中间填充 + + IEC104的消息 + 列表值 + + + + 解析不连续的short类型的数据 + + IEC104的消息 + 值列表信息 + + + + 解析不连续的float类型的数据 + + + 值列表信息 + + + + 昱行智造科技(深圳)有限公司的光源控制器,可以控制灯的亮暗,控制灯的颜色,通道等信息。 + + + + + 实例化一个默认的对象 + + + + + 初始化串口信息,波特率,8位数据位,1位停止位,偶校验
+ Initializes serial port information, baud rate, 8-bit data bit, 1-bit stop bit, even parity +
+ 端口号信息,例如"COM3" + 波特率 +
+ + + 初始化串口信息,57600波特率,8位数据位,1位停止位,偶校验
+ Initial serial port information, 57600 baud rate, 8 data bits, 1 stop bit, even parity +
+ 端口号信息,例如"COM3" +
+ + + 读取光源控制器的参数信息,需要传入通道号信息,读取到详细的内容参照的值 + + 读取的通道信息 + 读取的参数值 + + + + 将光源控制器的数据写入到设备,返回是否写入成功 + + 光源数据 + 是否写入成功 + + + + + + + 将命令和数据打包成用于发送的报文 + + 命令 + 命令数据 + 可用于发送的报文 + + + + 构建写入数据的报文命令 + + 准备写入的数据 + 报文命令 + + + + 构建读取数据的报文命令 + + 通道信息 + 构建读取的命令 + + + + 把服务器反馈的数据解析成实际的命令 + + 反馈的数据 + 结果内容 + + + + 光源的数据信息 + + + + + 实例化一个默认的对象 + + + + + 使用指定的原始数据来获取当前的对象 + + 原始数据 + + + + 光源颜色信息,1:红色 2:绿色 3:蓝色 4:白色(默认) + + + + + 光源的亮度信息,00-FF,值越大,亮度越大 + + + + + 光源的亮度等级,1-3 + + + + + 光源的工作模式,00:延时常亮 01:通道一频闪 02:通道二频闪 03:通道一二频闪 04:普通常亮 05:关闭 + + + + + 控制器的地址选择位 + + + + + 脉冲宽度,01-14H + + + + + 通道数据,01-08H的值 + + + + + 获取原始的数据信息 + + 原始的字节信息 + + + + 从原始的信息解析光源的数据 + + 原始的数据信息 + + + + + + + RKC温度控制器的辅助类信息,提供了报文的生成,读写的实现的方法
+ Auxiliary information of the RKC temperature controller provides a method for message generation and reading and writing +
+
+ + + 构建读取的报文命令,需要指定站号信息,数据地址 + + 站号信息 + 数据的地址 + 是否成功 + + + + 构建一个写入的报文信息 + + 站号信息 + 地址信息 + 等待写入的值 + 是否成功的结果报文 + + + + 从RKC设备读取Double类型的数据信息,地址示例:M1,M2,M3,AA,AB,B1,ER等,更详细的地址及具体含义需要参考API文档
+ Read Double type data information from RKC device. Examples of addresses: M1, M2, M3, AA, AB, B1, ER, etc. + For more detailed addresses and specific meanings, please refer to the API documentation +
+ 设备通信对象 + 表号信息,也叫站号信息 + 数据地址信息,地址示例:M1,M2,M3,AA,AB,B1,ER等 + 结果数据对象信息 +
+ + + 将Double类型的数据写入到RKC设备中去,地址示例:M1,M2,M3,AA,AB,B1,ER等,更详细的地址及具体含义需要参考API文档
+ Write Double type data to the RKC device. Examples of addresses: M1, M2, M3, AA, AB, B1, ER, etc. + For more detailed addresses and specific meanings, please refer to the API documentation +
+ 设备通信对象 + 表号信息,也叫站号信息 + 数据的地址信息,地址示例:M1,M2,M3,AA,AB,B1,ER等 + 等待写入的值 + 是否写入成功 +
+ + + + + + + + + RKC的CD/CH系列数字式温度控制器的串口类对象,可以读取测量值,CT1输入值,CT2输入值等等,地址的地址需要参考API文档的示例
+ The serial port object of RKC's CD/CH series digital temperature controller can read the measured value, CT1 input value, + CT2 input value, etc. The address of the address needs to refer to the example of the API document +
+ + 只能使用ReadDouble(string),Write(string,double)方法来读写数据,设备的串口默认参数为 8-1-N,8 个数据位,一个停止位,无奇偶校验
+ 地址支持站号信息,例如 s=2;M1 +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + RKC的CD/CH系列数字式温度控制器的网口透传类对象,可以读取测量值,CT1输入值,CT2输入值等等,地址的地址需要参考API文档的示例
+ RKC's CD/CH series digital temperature controller's network port transparently transmits objects, which can read measured values, CT1 input values, + CT2 input values, etc. The address of the address needs to refer to the example of the API document +
+ + 只能使用ReadDouble(string),Write(string,double)方法来读写数据
+ 地址支持站号信息,例如 s=2;M1 +
+ + 地址示例如下: + + + 地址名称 + 地址代号 + 数据范围 + 出厂方式 + 读写方式 + + + 测量值 + M1 + 测量低限到测量高限 + + Read + + + CT1输入值 + M2 + 0.0到100.0A + + Read + + + CT2输入值 + M3 + 0.0到100.0A + + Read + + + 第一报警输入 + AA + 0 关 1 开 + + Read + + + 第二报警输入 + AB + 0 关 1 开 + + Read + + + 熄火 + B1 + 0 关 1 开 + + Read + + + 错误代码 + ER + 0到255 + + Read + + + 运行/停止转换 + SR + 0 运行 1 停止 + 运行 + Read/Write + + + PID控制/自整定 + G1 + 0 PID 1 AT + PID控制 + Read/Write + + + 设定值(SV1) + S1 + 量程低限到量程高限 + 0(0.0) + Read/Write + + + 第一报警设定 + A1 + -1999到9999(小数点位置与PV相同) + 50(50.0) + Read/Write + + + 第二报警设定 + A2 + -1999到9999(小数点位置与PV相同) + -50(-50.0) + Read/Write + + + 第一加热断线报警设定 + A3 + 0.0到100.0A + 0.0 + Read/Write + + + 第二加热断线报警设定 + A4 + 1.0到100.0A + 0.0 + Read/Write + + + 控制回路断线报警设定 + A5 + 0-7200秒 + 0 + Read/Write + + + 比例带 加热侧 + P1 + 0-满量程 + 30(30.0) + Read/Write + + + 积分时间 + I1 + 0-3600秒 + 240 + Read/Write + + + 微分时间 + D1 + 0-3600秒 + 60 + Read/Write + + + 积分饱和带宽 + W1 + 比例带的1%-100% + 100 + Read/Write + + + 制冷侧比例带 + P2 + 比例带的1%-3000% + 3000 + Read/Write + + + 冷热死区 + V1 + -10.0到10.0 + 0(0.0) + Read/Write + + + 比例周期(输出1) + T0 + 0-100秒 + 20 + Read/Write + + + 比例周期(输出2) + T1 + 0-100秒 + 20 + Read/Write + + + 自主校正 + G2 + 0 自主校正停止 1 自主校正开始 + 0 + Read/Write + + + PV基准 + PB + 量程低限到量程高, 限温度输入 -1999到+1999 [℉ ]或 -199.9到+999.9 [℉ ] + 0(0.0) + Read/Write + + + 设定数据锁 + LK + 0到7 + 0 + Read/Write + + + +
+ + + 实例化默认的构造方法
+ Instantiate the default constructor +
+
+ + + 使用指定的ip地址和端口来实例化一个对象
+ Instantiate an object with the specified IP address and port +
+ 设备的Ip地址 + 设备的端口号 +
+ + + PLC的站号信息,需要和实际的设置值一致,默认为1
+ The station number information of the PLC needs to be consistent with the actual setting value. The default is 1. +
+
+ + + + + + + + + + + + + + + + + + 阿尔泰科技发展有限公司的DAM3601温度采集模块,基于ModbusRtu开发完成。 + + + 该温度采集模块是基于modbus-rtu,但不是标准的modbus协议,存在一些小误差,需要重写实现,并且提供了基础的数据转换 + + + + + 实例化一个默认的对象 + + + + + 使用站号实例化默认的对象 + + 站号信息 + + + + 读取所有的温度数据,并转化成相关的信息 + + 结果数据对象 + + + + 数据转换方法,将读取的值, + + 读取的值 + 转换后的值 + + + + 从Modbus服务器批量读取寄存器的信息,需要指定起始地址,读取长度 + + 起始地址,格式为"1234",或者是带功能码格式x=3;1234 + 读取的数量 + 带有成功标志的字节信息 + + 此处演示批量读取的示例 + + + + + + + + + 系统的语言基类,默认也即是中文版本 + + + + + English Version Text + + + + + 一个通用的日志接口,支持5个等级的日志消息写入,支持设置当前的消息等级,定义一个消息存储前的触发事件。
+ A general-purpose log interface, supports the writing of 5 levels of log messages, supports setting the current message level, and defining a trigger event before a message is stored. +
+ + 本组件的日志核心机制,如果您使用了本组件却不想使用本组件的日志组件功能,可以自己实现新的日志组件,只要继承本接口接口。其他常用的日志组件如下:(都是可以实现的) + + Log4Net + NLog + + + + 自己实例化操作,在HslCommunication里面,可选三种类型 + + + + + + + + Form的示例,存储日志的使用都是一样的,就是实例化的时候不一致,以下示例代码以单文件日志为例 + + +
+ + + 日志存储模式,1:单文件,2:按大小存储,3:按时间存储
+ Log storage mode, 1: single file, 2: storage by size, 3: storage by time +
+
+ + + 获取或设置当前的日志记录统计信息,如果你需要统计最近30天的日志,就需要对其实例化,详细参照
+ Get or set the current log record statistics. If you need to count the logs of the last 30 days, + you need to instantiate it. For details, please refer to +
+
+ + + 获取或设置当前的日志信息在存储的时候是否在控制台进行输出,默认不输出。
+ Gets or sets whether the current log information is output on the console when it is stored. It is not output by default. +
+
+ + + 获取或设置是否记录线程ID的数据信息,默认为 True,表示记录,否则,需要设置为 False
+ Get or set whether to record the data information of the thread ID, the default is True, which means record, otherwise, it needs to be set to False
+
+
+ + + 获取或设置在记录文件日志的时候,是否记录不可见字符STX(也即是ASCII字符集的0x02)。默认为 True, 也即是记录这个字符,在日志分析的时候,可以更加方便的分析。
+ Gets or sets whether to record the invisible character STX (that is, 0x02 of the ASCII character set) when recording the file log. + The default is True, that is, this character is recorded, which can be analyzed more conveniently during log analysis. +
+
+ + + 获取或设置当前日志时间的小时偏差信息,用来解决某些情况下时区设置异常导致记录时间一直不正确的问题,默认为 0,也就是不处理。可以为正数,也可以为负数。
+ Obtain or set the hourly deviation information of the current log time to solve the problem that the recording time has been incorrect due to abnormal time zone setting in some cases, + and the default is 0, that is, it is not processed. Can be positive or negative. +
+
+ + + 存储之前引发的事件,允许额外的操作,比如打印控制台,存储数据库等等
+ Store previously raised events, allowing additional operations, such as print console, store database, etc. +
+
+ + + 通过指定消息等级,关键字,日志信息进行消息记录
+ Record messages by specifying message level, keywords, and log information +
+ 消息等级 + 关键字 + 日志内容 +
+ + + 写入一条解释性的信息,不属于消息等级控制的范畴
+ Write an explanatory message that is not part of message level control +
+ 解释文本 +
+ + + 写入一条调试日志
+ Write a debug log +
+ 日志内容 +
+ + + 写入一条带关键字的调试日志
+ Write a debug log with keywords +
+ 关键字 + 日志内容 +
+ + + 写入一条错误日志
+ Write an error log +
+ 日志内容 +
+ + + 写入一条带关键字的错误日志
+ Write an error log with keywords +
+ 关键字 + 日志内容 +
+ + + 写入一条带关键字的异常信息
+ Write an exception log with keywords +
+ 关键字 + 异常 +
+ + + 写入一条带关键字和描述信息的异常信息
+ Write an exception log with keywords and text +
+ 关键字 + 内容 + 异常 +
+ + + 写入一条致命日志
+ Write an fatal log +
+ 日志内容 +
+ + + 写入一条带关键字的致命日志
+ Write an fatal log with keywords +
+ 关键字 + 日志内容 +
+ + + 写入一条普通日志
+ Write an infomation log +
+ 日志内容 +
+ + + 写入一条带关键字的普通日志
+ Write an information log with keywords +
+ 关键字 + 日志内容 +
+ + + 写入一行换行符
+ Write a newline +
+
+ + + 写入任意字符串
+ Write arbitrary string +
+ 文本 +
+ + + 写入一条警告日志
+ Write an warn log +
+ 日志内容 +
+ + + 写入一条带关键字的警告日志
+ Write an warn log with keywords +
+ 关键字 + 日志内容 +
+ + + 设置日志的存储等级,高于该等级的才会被存储
+ Set the storage level of the logs. Only the logs above this level will be stored. +
+ 登记信息 +
+ + + 获取已存在的日志文件名称
+ Get the name of an existing log file +
+ 文件列表 +
+ + + 过滤掉指定的关键字的日志,该信息不存储,但仍然触发事件
+ Filter out the logs of the specified keywords, the information is not stored, but the event is still triggered +
+ 关键字 +
+ + + 移除过滤的关键字存储
+ Remove filtered keyword storage +
+ 关键字 +
+ + + 日志存储类的基类,提供一些基础的服务 + + + 基于此类可以实现任意的规则的日志存储规则,欢迎大家补充实现,本组件实现了3个日志类 + + 单文件日志类 + 根据文件大小的类 + 根据时间进行存储的类 + + + + + + 实例化一个日志对象
+ Instantiate a log object +
+
+ + + 文件存储的锁 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 当写入文件完成的时候触发,这时候已经释放了文件的句柄了。
+ Triggered when writing to the file is complete, and the file handle has been released. +
+
+ + + 释放资源 + + 是否初次调用 + + + + + + + 基于路径实现的日志类的基类,提供几个基础的方法信息。
+ The base class of the log class implemented based on the path provides several basic method information. +
+
+ + + + + + 返回所有的日志文件名称,返回一个列表
+ Returns all log file names, returns a list +
+ 所有的日志文件信息 +
+ + + 当前正在存储的文件名
+ File name currently being stored +
+
+ + + 存储文件的路径,如果设置为空,就不进行存储。
+ The path for storing the file. If it is set to empty, it will not be stored. +
+
+ + + 控制文件的数量,小于1则不进行任何操作,当设置为10的时候,就限制文件数量为10。
+ Control the number of files. If it is less than 1, no operation is performed. When it is set to 10, the number of files is limited to 10. +
+
+ + + + + + 一个按照实际进行数据分割的辅助基类,可以用于实现对某个的API按照每天进行调用次数统计,也可以实现对某个设备数据按照天进行最大最小值均值分析,这些都是需要继承实现。
+ An auxiliary base class that divides the data according to the actual data can be used to implement statistics on the number of calls per day for a certain API, and it can also implement the maximum and minimum average analysis of a certain device data according to the day. These all need to be inherited. . +
+ 统计的数据类型 +
+ + + 实例化一个新的数据统计内容,需要指定当前的时间统计方式,按小时,按天,按月等等,还需要指定统计的数据数量,比如按天统计30天。
+ To instantiate a new data statistics content, you need to specify the current time statistics method, by hour, by day, by month, etc., + and also need to specify the number of statistics, such as 30 days by day. +
+ 时间的统计方式 + 数据的数量信息,如果本值为-1,则表示数据一直增长 +
+ + + 获取当前的统计类信息时间统计规则
+ Get the current statistical information time statistics rule +
+
+ + + 获取当前的统计类信息的数据总量
+ Get the total amount of current statistical information +
+
+ + + 重置当前的统计信息,需要指定统计的数据内容,最后一个数据的标记信息,本方法主要用于还原统计信息
+ To reset the current statistical information, you need to specify the content of the statistical data, + and the tag information of the last data. This method is mainly used to restore statistical information +
+ 统计结果数据信息 + 最后一次标记的内容 +
+ + + 新增一个统计信息,将会根据当前的时间来决定插入数据位置,如果数据位置发生了变化,则数据向左发送移动。如果没有移动或是移动完成后,最后一个数进行自定义的数据操作
+ Adding a new statistical information will determine the position to insert the data according to the current time. If the data position changes, + the data will be sent to the left. If there is no movement or after the movement is completed, Custom data operations on the last number +
+ 增对最后一个数的自定义操作 +
+ + + 新增一个统计信息,将会根据当前的时间来决定插入数据位置,如果数据位置发生了变化,则数据向左发送移动。如果没有移动或是移动完成后,最后一个数进行自定义的数据操作
+ Adding a new statistical information will determine the position to insert the data according to the current time. If the data position changes, + the data will be sent to the left. If there is no movement or after the movement is completed, Custom data operations on the last number +
+ 增对最后一个数的自定义操作 + 增加的时间信息 +
+ + + 获取当前的统计信息的数据快照,这是数据的副本,修改了里面的值不影响
+ Get a data snapshot of the current statistics. This is a copy of the data. Modifying the value inside does not affect +
+ 实际的统计数据信息 +
+ + + 根据指定的时间范围来获取统计的数据信息快照,包含起始时间,包含结束时间,这是数据的副本,修改了里面的值不影响
+ Get a snapshot of statistical data information according to the specified time range, including the start time, + also the end time. This is a copy of the data. Modifying the value inside does not affect +
+ 起始时间 + 结束时间 + 指定实际范围内的数据副本 +
+ + + 获取当前的统计信息的数据快照,这是数据的副本,修改了里面的值不影响
+ Get a data snapshot of the current statistics. This is a copy of the data. Modifying the value inside does not affect +
+ 实际的统计数据信息 +
+ + + 根据当前数据统计的时间模式,获取最新的数据标记信息
+ Obtain the latest data mark information according to the time mode of current data statistics +
+ 数据标记 +
+ + + 根据指定的时间,获取到该时间指定的数据标记信息
+ According to the specified time, get the data mark information specified at that time +
+ 指定的时间 + 数据标记 +
+ + + 当前的实际模式 + + + + + 带有日志消息的事件 + + + + + 消息信息 + + + + + 日志存储回调的异常信息 + + + + + 使用其他的异常信息来初始化日志异常 + + 异常信息 + + + + 日志文件的存储模式 + + + + + 单个文件的存储模式 + + + + + 根据文件的大小来存储,固定一个大小,不停的生成文件 + + + + + 根据时间来存储,可以设置年,季,月,日,小时等等 + + + + + 日志文件输出模式 + + + + + 按每分钟生成日志文件 + + + + + 按每个小时生成日志文件 + + + + + 按每天生成日志文件 + + + + + 按每个周生成日志文件 + + + + + 按每个月生成日志文件 + + + + + 按每季度生成日志文件 + + + + + 按每年生成日志文件 + + + + + 记录消息的等级 + + + + + 一条消息都不记录 + + + + + 记录致命等级及以上日志的消息 + + + + + 记录异常等级及以上日志的消息 + + + + + 记录警告等级及以上日志的消息 + + + + + 记录信息等级及以上日志的消息 + + + + + 记录调试等级及以上日志的信息 + + + + + 单条日志的记录信息,包含了消息等级,线程号,关键字,文本信息
+ Record information of a single log, including message level, thread number, keywords, text information +
+
+ + + 实例化一个默认的对象
+ Instantiate a default object +
+
+ + + 单个记录信息的标识ID,程序重新运行时清空,代表程序从运行以来的日志计数,不管存储的或是未存储的
+ The ID of a single record of information. It is cleared when the program is re-run. + It represents the log count of the program since it was run, whether stored or unstored. +
+
+ + + 消息的等级,包括DEBUG,INFO,WARN,ERROR,FATAL,NONE共计六个等级
+ Message levels, including DEBUG, INFO, WARN, ERROR, FATAL, NONE total six levels +
+
+ + + 线程ID,发生异常时的线程号
+ Thread ID, the thread number when the exception occurred +
+
+ + + 消息文本,记录日志的时候给定
+ Message text, given when logging +
+
+ + + 记录日志的时间,而非存储日志的时间
+ The time the log was recorded, not the time it was stored +
+
+ + + 消息的关键字
+ Keyword of the message +
+
+ + + 是否取消写入到文件中去,在事件 触发的时候捕获即可设置。
+ Whether to cancel writing to the file, can be set when the event is triggered. +
+
+ + + + + + 返回表示当前对象的字符串,剔除了关键字
+ Returns a string representing the current object, excluding keywords +
+ 字符串信息 +
+ + + 日志类的管理器,提供了基本的功能代码。
+ The manager of the log class provides the basic function code. +
+
+ + + 日志文件的头标志 + + + + + 公开的一个静态变量,允许随意的设置
+ Public static variable, allowing arbitrary setting +
+
+ + + 通过异常文本格式化成字符串用于保存或发送
+ Formatted as a string with exception text for saving or sending +
+ 文本消息 + 异常 + 异常最终信息 +
+ + + 一个日志组件,可以根据时间来区分不同的文件存储
+ A log component that can distinguish different file storages based on time +
+ + 此日志实例将根据日期时间来进行分类,支持的时间分类如下: + + 分钟 + 小时 + + + 月份 + 季度 + 年份 + + 当然你也可以指定允许存在多少个日志文件,比如我允许存在最多10个文件,如果你的日志是根据天来分文件的,那就是10天的数据。 + 同理,如果你的日志是根据年来分文件的,那就是10年的日志文件。 + + + + + + + + +
+ + + 实例化一个根据时间存储的日志组件,需要指定每个文件的存储时间范围
+ Instantiate a log component based on time, you need to specify the storage time range for each file +
+ 文件存储的路径 + 存储文件的间隔 + 指定当前的日志文件数量上限,如果小于0,则不限制,文件一直增加,如果设置为10,就限制最多10个文件,会删除最近时间的10个文件之外的文件。 +
+ + + + + + + + + 根据文件的大小来存储日志信息,当前的文件大小增长超过设定值,就会创建新的文件来存储,新的文件命名为当前时间。
+ Log information is stored according to the size of the file. If the current file size exceeds the set value, a new file is created for storage, and the new file is named the current time. +
+ + 此日志的实例是根据文件的大小储存,例如设置了2M,每隔2M,系统将生成一个新的日志文件。当然你也可以指定允许存在多少个日志文件, + 比如我允许存在最多10个文件,那总量就是20M,旧的文件会被删除掉。 + + + + + + + + +
+ + + 实例化一个根据文件大小生成新文件的,默认是2M大的文件
+ Instantiate a new file based on the file size. The default is 2M. +
+ 日志文件的保存路径 + 每个日志文件的最大大小,默认2M + 指定当前的日志文件数量上限,如果小于0,则不限制,文件一直增加,如果设置为10,就限制最多10个文件,会删除最近时间的10个文件之外的文件。 +
+ + + + + + 获取之前保存的日志文件,如果文件大小超过了设定值,将会生成新的文件名称
+ Obtain the previously saved log file. If the file size exceeds the set value, a new file name will be generated +
+ 文件名称 +
+ + + 获取一个新的默认的文件名称
+ Get a new default file name +
+ 完整的文件名 +
+ + + + + + 单日志文件对象,所有的日志信息的记录都会写入一个文件里面去。文件名指定为空的时候,自动不存储文件。
+ Single log file object, all log information records will be written to a file. When the file name is specified as empty, the file is not stored automatically. +
+ + 此日志实例化需要指定一个完整的文件路径,当需要记录日志的时候调用方法,会使得日志越来越大,对于写入的性能没有太大影响,但是会影响文件读取。 + + + + + + + + +
+ + + 实例化一个单文件日志的对象,如果日志的路径为空,那么就不存储数据,只触发事件
+ Instantiate a single file log object. If the log path is empty, then no data is stored and only the event is triggered. +
+ 文件的路径 +
+ + + 单日志文件允许清空日志内容
+ Single log file allows clearing log contents +
+
+ + + 获取单日志文件的所有保存记录
+ Get all saved records of a single log file +
+ 字符串信息 +
+ + + 获取所有的日志文件数组,对于单日志文件来说就只有一个
+ Get all log file arrays, only one for a single log file +
+ 字符串数组,包含了所有的存在的日志数据 +
+ + + + + + + + + 一个统计次数的辅助类,可用于实现分析一些次数统计信息,比如统计某个API最近每天的访问次数, + 统计日志组件最近每天访问的次数,调用者只需要关心统计方式和数据个数,详细参照API文档。
+ An auxiliary class for counting the number of times, which can be used to realize the analysis of some number of times statistical information, + such as counting the number of daily visits of an API, and counting the number of daily visits of the log component. + The caller only needs to care about the statistical method and the number of data. Refer to details API documentation. +
+ + 我们来举个例子:我有个方法,AAA需要记录一下连续60天的调用次数信息 + + 因为这个数据是保存在内存里的,程序重新运行就丢失了,如果希望让这个数据一直在程序的话,在软件退出的时候需要存储文件,在软件启动的时候,加载文件数据 + + +
+ + + + + + 新增一个统计信息,将会根据当前的时间来决定插入数据位置,如果数据位置发生了变化,则数据向左发送移动。如果没有移动或是移动完成后,最后一个数进行新增数据 frequency 次
+ Adding a new statistical information will determine the position to insert the data according to the current time. If the data position changes, + the data will be sent to the left. If there is no movement or after the movement is completed, add data to the last number frequency times +
+ 新增的次数信息,默认为1 +
+ + + 新增一个统计信息,将会根据指定的时间来决定插入数据位置,如果数据位置发生了变化,则数据向左发送移动。如果没有移动或是移动完成后,最后一个数进行新增数据 frequency 次
+ Adding a new statistical information will determine the position to insert the data according to the specified time. If the data position changes, + the data will be sent to the left. If there is no movement or after the movement is completed, add data to the last number frequency times +
+ 新增的次数信息 + 新增的次数的时间 +
+ + + 将当前所有的数据都写入到二进制的内存里去,可以用来写入文件或是网络发送。
+ Write all current data into binary memory, which can be used to write files or send over the network. +
+ 二进制的byte数组 +
+ + + 将当前的统计信息及数据内容写入到指定的文件里面,需要指定文件的路径名称
+ Write the current statistical information and data content to the specified file, you need to specify the path name of the file +
+ 文件的完整的路径名称 +
+ + + 从二进制的数据内容加载,会对数据的合法性进行检查,如果数据不匹配,会报异常
+ Loading from the binary data content will check the validity of the data. If the data does not match, an exception will be reported +
+ 等待加载的二进制数据 + +
+ + + 从指定的文件加载对应的统计信息,通常是调用方法存储的文件,如果文件不存在,将会跳过加载
+ Load the corresponding statistical information from the specified file, usually the file stored by calling the method. + If the file does not exist, the loading will be skipped +
+ 文件的完整的路径名称 + 当文件的模式和当前的模式设置不一样的时候,会引发异常 +
+ + + + + + 获取当前的所有的值的总和
+ Get the sum of all current values +
+
+ + + 的词典集合类,用于多个数据的统计信息,例如可以统计多个规格的产量信息,统计多个方法的调用次数信息
+ The dictionary collection class of is used for the statistical information of multiple data, for example, + the output information of multiple specifications can be counted, and the number of calls of multiple methods can be counted. +
+
+ + + 根据指定的存储模式,数据个数来实例化一个对象
+ According to the specified storage mode, the number of data to instantiate an object +
+ 当前的数据存储模式 + 准备存储的数据总个数 +
+ + + 根据给定的关键字信息,获取相关的 对象,进而执行很多的操作
+ According to the given keyword information, obtain related objects, and then perform many operations +
+ 关键字 + 日志对象,如果当前的日志对象不存在,就返回为NULL +
+ + + 手动新增一个对象,需要指定相关的关键字
+ Manually add a object, you need to specify related keywords +
+ 关键字信息 + 日志统计对象 +
+ + + 移除一个对象,需要指定相关的关键字,如果关键字本来就存在,返回 True, 如果不存在,返回 False
+ To remove a object, you need to specify the relevant keyword. If the keyword already exists, return True, if it does not exist, return False +
+ 关键字信息 + 如果关键字本来就存在,返回 True, 如果不存在,返回 False +
+ + + 新增一个统计信息,将会根据当前的时间来决定插入数据位置,如果数据位置发生了变化,则数据向左发送移动。如果没有移动或是移动完成后,最后一个数进行新增数据 frequency 次
+ Adding a new statistical information will determine the position to insert the data according to the current time. If the data position changes, + the data will be sent to the left. If there is no movement or after the movement is completed, add data to the last number frequency times +
+ 当前选择的关键字 + 新增的次数信息,默认为1 +
+ + + 新增一个统计信息,将会根据当前的时间来决定插入数据位置,如果数据位置发生了变化,则数据向左发送移动。如果没有移动或是移动完成后,最后一个数进行新增数据 frequency 次
+ Adding a new statistical information will determine the position to insert the data according to the current time. If the data position changes, + the data will be sent to the left. If there is no movement or after the movement is completed, add data to the last number frequency times +
+ 当前的关键字 + 新增的次数信息 + 新增的次数的时间 +
+ + + 获取当前的统计信息的数据快照,这是数据的副本,修改了里面的值不影响
+ Get a data snapshot of the current statistics. This is a copy of the data. Modifying the value inside does not affect +
+ 当前的关键字的信息 + 实际的统计数据信息 +
+ + + 根据指定的时间范围来获取统计的数据信息快照,包含起始时间,包含结束时间,这是数据的副本,修改了里面的值不影响
+ Get a snapshot of statistical data information according to the specified time range, including the start time, + also the end time. This is a copy of the data. Modifying the value inside does not affect +
+ 当前的关键字信息 + 起始时间 + 结束时间 + 指定实际范围内的数据副本 +
+ + + 获取所有的关键字的数据信息
+ Get data information of all keywords +
+ 字符串数组 +
+ + + 将当前的统计信息及数据内容写入到指定的文件里面,需要指定文件的路径名称
+ Write the current statistical information and data content to the specified file, you need to specify the path name of the file +
+ 文件的完整的路径名称 +
+ + + 从指定的文件加载对应的统计信息,通常是调用方法存储的文件,如果文件不存在,将会跳过加载
+ Load the corresponding statistical information from the specified file, usually the file stored by calling the method. + If the file does not exist, the loading will be skipped +
+ 文件的完整的路径名称 + 当文件的模式和当前的模式设置不一样的时候,会引发异常 +
+ + + 获取当前的统计类信息时间统计规则
+ Get the current statistical information time statistics rule +
+
+ + + 获取当前的统计类信息的数据总量
+ Get the total amount of current statistical information +
+
+ + + 获取当前词典类自身的日志统计对象,统计所有的元素的统计信息
+ Get the log statistics object of the current dictionary class itself, and count the statistics of all elements +
+
+ + + 一个用于数值范围记录的类,可以按照时间进行分类统计,比如计算一个温度值的每天的开始值,结束值,最大值,最小值,平均值信息。详细见API文档信息。
+ A class used to record the value range, which can be classified according to time, such as calculating the start value, end value, + maximum value, minimum value, and average value of a temperature value. See the API documentation for details. +
+ + 我们来举个例子:我们需要对一个温度数据进行分析,分析60天之内的最大值最小值等等信息 + + 因为这个数据是保存在内存里的,程序重新运行就丢失了,如果希望让这个数据一直在程序的话,在软件退出的时候需要存储文件,在软件启动的时候,加载文件数据 + + +
+ + + + + + 新增一个数据用于分析,将会根据当前的时间来决定插入数据位置,如果数据位置发生了变化,则数据向左发送移动。如果没有移动或是移动完成后,最后一个数进行数据更新,包括最大值,最小值,平均值。
+ Add a new data for analysis, and will determine the position to insert the data according to the current time. If the data position changes, + the data will be sent to the left. If there is no movement or after the movement is completed, data update for the last number, including maximum, minimum, and average. +
+ 当前的新的数据值 +
+ + + 新增一个数据用于分析,将会指定的时间来决定插入数据位置,如果数据位置发生了变化,则数据向左发送移动。如果没有移动或是移动完成后,最后一个数进行数据更新,包括最大值,最小值,平均值。
+ dd a new data for analysis, and will determine the position to insert the data according to the specified time. If the data position changes, + the data will be sent to the left. If there is no movement or after the movement is completed, data update for the last number, including maximum, minimum, and average. +
+ 当前的新的数据值 + 指定的时间信息 +
+ + + 当前设置数据的总的数量
+ The total amount of data currently set +
+
+ + + 将当前所有的数据都写入到二进制的内存里去,可以用来写入文件或是网络发送。
+ Write all current data into binary memory, which can be used to write files or send over the network. +
+ 二进制的byte数组 +
+ + + 将当前的统计信息及数据内容写入到指定的文件里面,需要指定文件的路径名称
+ Write the current statistical information and data content to the specified file, you need to specify the path name of the file +
+ 文件的完整的路径名称 +
+ + + 从二进制的数据内容加载,会对数据的合法性进行检查,如果数据不匹配,会报异常
+ Loading from the binary data content will check the validity of the data. If the data does not match, an exception will be reported +
+ 等待加载的二进制数据 + +
+ + + 从指定的文件加载对应的统计信息,通常是调用方法存储的文件,如果文件不存在,将会跳过加载
+ Load the corresponding statistical information from the specified file, usually the file stored by calling the method. + If the file does not exist, the loading will be skipped +
+ 文件的完整的路径名称 +
+ + + + + + 的词典集合类,用于多个数据的统计信息,例如可以统计多个温度变量的最大值,最小值,平均值
+ The dictionary collection class, used for statistical information of multiple data, + for example, it can count the maximum, minimum, and average values of multiple temperature variables +
+
+ + + 根据指定的存储模式,数据个数来实例化一个对象
+ According to the specified storage mode, the number of data to instantiate an object +
+ 当前的数据存储模式 + 准备存储的数据总个数 +
+ + + 根据给定的关键字信息,获取相关的 对象,进而执行很多的操作
+ According to the given keyword information, obtain related objects, and then perform many operations +
+ 关键字 + 日志对象,如果当前的日志对象不存在,就返回为NULL +
+ + + 手动新增一个 对象,需要指定相关的关键字
+ Manually add a object, you need to specify related keywords +
+ 关键字信息 + 日志数据分析对象 +
+ + + 移除一个对象,需要指定相关的关键字,如果关键字本来就存在,返回 True, 如果不存在,返回 False
+ To remove a object, you need to specify the relevant keyword. If the keyword already exists, return True, if it does not exist, return False +
+ 关键字信息 + 如果关键字本来就存在,返回 True, 如果不存在,返回 False +
+ + + 新增一个数据用于分析,将会根据当前的时间来决定插入数据位置,如果数据位置发生了变化,则数据向左发送移动。如果没有移动或是移动完成后,最后一个数进行数据更新,包括最大值,最小值,平均值。
+ Add a new data for analysis, and will determine the position to insert the data according to the current time. If the data position changes, + the data will be sent to the left. If there is no movement or after the movement is completed, data update for the last number, including maximum, minimum, and average. +
+ 当前的关键字 + 当前的新的数据值 +
+ + + 新增一个数据用于分析,将会指定的时间来决定插入数据位置,如果数据位置发生了变化,则数据向左发送移动。如果没有移动或是移动完成后,最后一个数进行数据更新,包括最大值,最小值,平均值。
+ dd a new data for analysis, and will determine the position to insert the data according to the specified time. If the data position changes, + the data will be sent to the left. If there is no movement or after the movement is completed, data update for the last number, including maximum, minimum, and average. +
+ 关键字信息 + 当前的新的数据值 + 指定的时间信息 +
+ + + 获取当前的统计信息的数据快照,这是数据的副本,修改了里面的值不影响
+ Get a data snapshot of the current statistics. This is a copy of the data. Modifying the value inside does not affect +
+ 当前的关键字的信息 + 实际的统计数据信息 +
+ + + 根据指定的时间范围来获取统计的数据信息快照,包含起始时间,包含结束时间,这是数据的副本,修改了里面的值不影响
+ Get a snapshot of statistical data information according to the specified time range, including the start time, + also the end time. This is a copy of the data. Modifying the value inside does not affect +
+ 当前的关键字信息 + 起始时间 + 结束时间 + 指定实际范围内的数据副本 +
+ + + 获取所有的关键字的数据信息
+ Get data information of all keywords +
+ 字符串数组 +
+ + + 将当前的统计信息及数据内容写入到指定的文件里面,需要指定文件的路径名称
+ Write the current statistical information and data content to the specified file, you need to specify the path name of the file +
+ 文件的完整的路径名称 +
+ + + 从指定的文件加载对应的统计信息,通常是调用方法存储的文件,如果文件不存在,将会跳过加载
+ Load the corresponding statistical information from the specified file, usually the file stored by calling the method. + If the file does not exist, the loading will be skipped +
+ 文件的完整的路径名称 + 当文件的模式和当前的模式设置不一样的时候,会引发异常 +
+ + + 获取当前的统计类信息时间统计规则
+ Get the current statistical information time statistics rule +
+
+ + + 获取当前的统计类信息的数据总量
+ Get the total amount of current statistical information +
+
+ + + 获取当前词典类自身的日志统计对象,统计所有的元素的数据分析次数
+ Get the log statistics object of the current dictionary class itself, count the data analysis times of all elements +
+
+ + + 日志查看器的窗口类,用于分析统计日志数据 + + + + + 实例化一个日志查看器的窗口 + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + 一个用于日志分析的控件 + + + + + 实例化一个控件信息 + + + + + 设置日志的数据源 + + 直接从日志文件中读到的数据或是来自网络的数据 + + + + 从现有的日志中筛选数据 + + + + + + 底层的数据分析筛选 + + + + + + + + 必需的设计器变量。 + + + + + 清理所有正在使用的资源。 + + 如果应释放托管资源,为 true;否则为 false。 + + + + 设计器支持所需的方法 - 不要修改 + 使用代码编辑器修改此方法的内容。 + + + + + Modbus设备的接口,用来表示Modbus相关的设备对象,, , + ,,均实现了该接口信息
+ Modbus device interface, used to represent Modbus-related device objects, , + ,,, all implement the interface information +
+
+ + + + + + + + + + + + + + + + + + 将当前的地址信息转换成Modbus格式的地址,如果转换失败,返回失败的消息。默认不进行任何的转换。
+ Convert the current address information into a Modbus format address. If the conversion fails, a failure message will be returned. No conversion is performed by default. +
+ 传入的地址 + Modbus的功能码 + 转换之后Modbus的地址 +
+ + + + + + Modbus-Ascii通讯协议的类库,基于rtu类库完善过来,支持标准的功能码,也支持扩展的功能码实现,地址采用富文本的形式,详细见备注说明
+ The client communication class of Modbus-Ascii protocol is convenient for data interaction with the server. It supports standard function codes and also supports extended function codes. + The address is in rich text. For details, see the remarks. +
+ + 本客户端支持的标准的modbus协议,Modbus-Tcp及Modbus-Udp内置的消息号会进行自增,地址支持富文本格式,具体参考示例代码。
+ 读取线圈,输入线圈,寄存器,输入寄存器的方法中的读取长度对商业授权用户不限制,内部自动切割读取,结果合并。 +
+ + 基本的用法请参照下面的代码示例,初始化部分的代码省略 + + 复杂的读取数据的代码示例如下: + + 写入数据的代码如下: + + +
+ + + 实例化一个Modbus-ascii协议的客户端对象
+ Instantiate a client object of the Modbus-ascii protocol +
+
+ + + + + + + + + + + + + + + + + + Modbus-Ascii通讯协议的网口透传类,基于rtu类库完善过来,支持标准的功能码,也支持扩展的功能码实现,地址采用富文本的形式,详细见备注说明
+ The client communication class of Modbus-Ascii protocol is convenient for data interaction with the server. It supports standard function codes and also supports extended function codes. + The address is in rich text. For details, see the remarks. +
+ + 本客户端支持的标准的modbus-ascii协议,地址支持富文本格式,具体参考示例代码。
+ 读取线圈,输入线圈,寄存器,输入寄存器的方法中的读取长度对商业授权用户不限制,内部自动切割读取,结果合并。 +
+ + 基本的用法请参照下面的代码示例,初始化部分的代码省略 + + 复杂的读取数据的代码示例如下: + + 写入数据的代码如下: + + +
+ + + 实例化一个Modbus-ascii协议的客户端对象
+ Instantiate a client object of the Modbus-ascii protocol +
+
+ + + + + + + + + + + + + + + + + + Modbus协议相关辅助类,关于Modbus消息的组装以及拆分
+ Modbus protocol related auxiliary classes, about the assembly and splitting of Modbus messages +
+
+ + + + + + 使用0x17功能码来实现同时写入并读取数据的操作,使用一条报文来实现,需要指定读取的地址,长度,写入的地址,写入的数据信息,返回读取的结果数据。
+ Use 0x17 function code to write and read data at the same time, and use a message to implement it, + you need to specify the read address, length, written address, written data information, and return the read result data. +
+ Modbus通信对象 + 读取的地址信息 + 读取的长度信息 + 写入的地址信息 + 写入的字节数据信息 + 读取的结果对象 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Modbus协议相关的一些信息,包括功能码定义,报文的生成的定义等等信息
+ Some information related to Modbus protocol, including function code definition, definition of message generation, etc. +
+
+ + + 读取线圈 + + + + + 读取离散量 + + + + + 读取寄存器 + + + + + 读取输入寄存器 + + + + + 写单个线圈 + + + + + 写单个寄存器 + + + + + 写多个线圈 + + + + + 写多个寄存器 + + + + + 使用掩码的方式写入寄存器 + + + + + 读写同时的功能码,只有极个别的设备可能会支持的功能码 + + + + + 不支持该功能码 + + + + + 该地址越界 + + + + + 读取长度超过最大值 + + + + + 读写异常 + + + + + 构建Modbus读取数据的核心报文,需要指定地址,长度,站号,是否起始地址0,默认的功能码应该根据bool或是字来区分
+ To construct the core message of Modbus reading data, you need to specify the address, length, station number, + whether the starting address is 0, and the default function code should be distinguished according to bool or word +
+ Modbus的富文本地址 + 读取的数据长度 + 默认的站号信息 + 起始地址是否从0开始 + 默认的功能码 + 包含最终命令的结果对象 +
+ + + 构建一个同时读写的命令报文,指定读取地址,读取长度,写入地址,写入的字节数据信息,然后整个命令返回读取成功的字节数据信息 + + 读取的地址信息 + 读取的地址长度 + 写入的地址信息 + 写入的字节数据 + 站号信息 + 起始地址是否从0开始 + 默认的功能码 + 包含最终命令的结果对象 + + + + 构建Modbus读取数据的核心报文,需要指定地址,长度,站号,是否起始地址0,默认的功能码应该根据bool或是字来区分
+ To construct the core message of Modbus reading data, you need to specify the address, length, station number, + whether the starting address is 0, and the default function code should be distinguished according to bool or word +
+ Modbus的富文本地址 + 读取的数据长度 + 包含最终命令的结果对象 +
+ + + 构建Modbus写入bool数据的核心报文,需要指定地址,长度,站号,是否起始地址0,默认的功能码
+ To construct the core message that Modbus writes to bool data, you need to specify the address, length, + station number, whether the starting address is 0, and the default function code +
+ Modbus的富文本地址 + bool数组的信息 + 默认的站号信息 + 起始地址是否从0开始 + 默认的功能码 + 包含最终命令的结果对象 +
+ + + 构建Modbus写入bool数据的核心报文,需要指定地址,长度,站号,是否起始地址0,默认的功能码
+ To construct the core message that Modbus writes to bool data, you need to specify the address, length, station number, whether the starting address is 0, and the default function code +
+ Modbus的富文本地址 + bool的信息 + 默认的站号信息 + 起始地址是否从0开始 + 默认的功能码 + 包含最终命令的结果对象 +
+ + + 构建Modbus写入bool数组的核心报文,需要指定地址,长度,站号,是否起始地址0,默认的功能码
+ To construct the core message that Modbus writes to the bool array, you need to specify the address, length, + station number, whether the starting address is 0, and the default function code +
+ Modbus的富文本地址 + bool数组的信息 + 包含最终命令的结果对象 +
+ + + 构建Modbus写入bool数据的核心报文,需要指定地址,长度,站号,是否起始地址0,默认的功能码
+ To construct the core message that Modbus writes to bool data, you need to specify the address, length, station number, whether the starting address is 0, and the default function code +
+ Modbus的富文本地址 + bool数据的信息 + 包含最终命令的结果对象 +
+ + + 构建Modbus写入字数据的核心报文,需要指定地址,长度,站号,是否起始地址0,默认的功能码
+ To construct the core message of Modbus writing word data, you need to specify the address, length, + station number, whether the starting address is 0, and the default function code +
+ Modbus的富文本地址 + bool数组的信息 + 默认的站号信息 + 起始地址是否从0开始 + 默认的功能码 + 包含最终命令的结果对象 +
+ + + 构建Modbus写入字数据的核心报文,需要指定地址,长度,站号,是否起始地址0,默认的功能码
+ To construct the core message of Modbus writing word data, you need to specify the address, length, + station number, whether the starting address is 0, and the default function code +
+ Modbus的富文本地址 + short数据信息 + 默认的站号信息 + 起始地址是否从0开始 + 默认的功能码 + 包含最终命令的结果对象 +
+ + + 构建Modbus写入字数据的核心报文,需要指定地址,长度,站号,是否起始地址0,默认的功能码
+ To construct the core message of Modbus writing word data, you need to specify the address, length, + station number, whether the starting address is 0, and the default function code +
+ Modbus的富文本地址 + bool数组的信息 + 默认的站号信息 + 起始地址是否从0开始 + 默认的功能码 + 包含最终命令的结果对象 +
+ + + 构建Modbus写入掩码的核心报文,需要指定地址,长度,站号,是否起始地址0,默认的功能码
+ To construct the Modbus write mask core message, you need to specify the address, length, + station number, whether the starting address is 0, and the default function code +
+ Modbus的富文本地址 + 进行与操作的掩码信息 + 进行或操作的掩码信息 + 默认的站号信息 + 起始地址是否从0开始 + 默认的功能码 + 包含最终命令的结果对象 +
+ + + 构建Modbus写入字数据的核心报文,需要指定地址,长度,站号,是否起始地址0,默认的功能码
+ To construct the core message of Modbus writing word data, you need to specify the address, length, + station number, whether the starting address is 0, and the default function code +
+ Modbus的富文本地址 + bool数组的信息 + 包含最终命令的结果对象 +
+ + + 构建Modbus写入掩码数据的核心报文,需要指定地址,长度,站号,是否起始地址0,默认的功能码
+ To construct the core message of Modbus writing mask data, you need to specify the address, length, + station number, whether the starting address is 0, and the default function code +
+ Modbus的富文本地址 + 等待进行与操作的掩码 + 等待进行或操作的掩码 + 包含最终命令的结果对象 +
+ + + 构建Modbus写入字数据的核心报文,需要指定地址,长度,站号,是否起始地址0,默认的功能码
+ To construct the core message of Modbus writing word data, you need to specify the address, length, + station number, whether the starting address is 0, and the default function code +
+ Modbus的富文本地址 + short的值 + 包含最终命令的结果对象 +
+ + + 构建Modbus写入字数据的核心报文,需要指定地址,长度,站号,是否起始地址0,默认的功能码
+ To construct the core message of Modbus writing word data, you need to specify the address, length, + station number, whether the starting address is 0, and the default function code +
+ Modbus的富文本地址 + ushort的值 + 包含最终命令的结果对象 +
+ + + 从返回的modbus的书内容中,提取出真实的数据,适用于写入和读取操作
+ Extract real data from the content of the returned modbus book, suitable for writing and reading operations +
+ 返回的核心modbus报文信息 + 结果数据内容 +
+ + + 将modbus指令打包成Modbus-Tcp指令,需要指定ID信息来添加6个字节的报文头
+ Pack the Modbus command into Modbus-Tcp command, you need to specify the ID information to add a 6-byte message header +
+ Modbus核心指令 + 消息的序号 + Modbus-Tcp指令 +
+ + + 将modbus-tcp的报文数据重新还原成modbus指令,移除6个字节的报文头数据
+ Re-modify the message data of modbus-tcp into the modbus command, remove the 6-byte message header data +
+ modbus-tcp的报文 + modbus数据报文 +
+ + + 将modbus-rtu的数据重新还原成modbus数据,移除CRC校验的内容
+ Restore the data of modbus-rtu to modbus data again, remove the content of CRC check +
+ modbus-rtu的报文 + modbus数据报文 +
+ + + 将modbus指令打包成Modbus-Rtu指令,在报文的末尾添加CRC16的校验码
+ Pack the modbus instruction into Modbus-Rtu instruction, add CRC16 check code at the end of the message +
+ Modbus指令 + Modbus-Rtu指令 +
+ + + 将一个modbus核心的数据报文,转换成modbus-ascii的数据报文,增加LRC校验,增加首尾标记数据
+ Convert a Modbus core data message into a Modbus-ascii data message, add LRC check, and add head and tail tag data +
+ modbus-rtu的完整报文,携带相关的校验码 + 可以用于直接发送的modbus-ascii的报文 +
+ + + 将一个modbus-ascii的数据报文,转换成的modbus核心数据报文,移除首尾标记,移除LRC校验
+ Convert a Modbus-ascii data message into a Modbus core data message, remove the first and last tags, and remove the LRC check +
+ modbus-ascii的完整报文,携带相关的校验码 + 可以用于直接发送的modbus的报文 +
+ + + 分析Modbus协议的地址信息,该地址适应于tcp及rtu模式
+ Analysis of the address information of Modbus protocol, the address is adapted to tcp and rtu mode +
+ 带格式的地址,比如"100","x=4;100","s=1;100","s=1;x=4;100" + 默认的站号信息 + 起始地址是否从0开始 + 默认的功能码信息 + 转换后的地址信息 +
+ + + 通过错误码来获取到对应的文本消息
+ Get the corresponding text message through the error code +
+ 错误码 + 错误的文本描述 +
+ + + + + + + + + + + + + + + 服务器端提供的数据监视服务 + + + + + 本次数据监视的地址 + + + + + 数据写入时触发的事件 + + + + + 数据改变时触发的事件 + + + + + 强制设置触发事件 + + 数据值信息 + + + + 强制设置触发值变更事件 + + 变更前的值 + 变更后的值 + + + + Modbus-Rtu通讯协议的类库,多项式码0xA001,支持标准的功能码,也支持扩展的功能码实现,地址采用富文本的形式,详细见备注说明
+ Modbus-Rtu communication protocol class library, polynomial code 0xA001, supports standard function codes, + and also supports extended function code implementation. The address is in rich text. For details, see the remark +
+ + 本客户端支持的标准的modbus协议,Modbus-Tcp及Modbus-Udp内置的消息号会进行自增,地址支持富文本格式,具体参考示例代码。
+ 读取线圈,输入线圈,寄存器,输入寄存器的方法中的读取长度对商业授权用户不限制,内部自动切割读取,结果合并。 +
+ + + +
+ + + 实例化一个Modbus-Rtu协议的客户端对象
+ Instantiate a client object of the Modbus-Rtu protocol +
+
+ + + 指定Modbus从站的站号来初始化
+ Specify the station number of the Modbus slave to initialize +
+ Modbus从站的站号 +
+ + + + + + + + + + + + + + + 获取或设置是否启用CRC16校验码的检查功能,默认启用,如果需要忽略检查CRC16,则设置为 false 即可。
+ Gets or sets whether to enable the check function of CRC16 check code. It is enabled by default. If you need to ignore the check of CRC16, you can set it to false. +
+
+ + + + + + + + + + + + 将Modbus报文数据发送到当前的通道中,并从通道中接收Modbus的报文,通道将根据当前连接自动获取,本方法是线程安全的。
+ Send Modbus message data to the current channel, and receive Modbus messages from the channel. The channel will automatically obtain it according to the current connection. This method is thread-safe. +
+ 发送的完整的报文信息 + 接收到的Modbus报文信息 + + 需要注意的是,本方法的发送和接收都只需要输入Modbus核心报文,例如读取寄存器0的字数据 01 03 00 00 00 01,最后面两个字节的CRC是自动添加的,收到的数据也是只有modbus核心报文,例如:01 03 02 00 00 , 已经成功校验CRC校验并移除了,所以在解析的时候需要注意。
+ It should be noted that the sending and receiving of this method only need to input Modbus core messages, for example, read the word data 01 03 00 00 00 01 of register 0, the last two bytes of CRC are automatically added, + and received The data is also only modbus core messages, for example: 01 03 02 00 00, CRC has been successfully checked and removed, so you need to pay attention when parsing. +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + /param> + + + /param> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Modbus-Tcp协议的客户端通讯类,方便的和服务器进行数据交互,支持标准的功能码,也支持扩展的功能码实现,地址采用富文本的形式,详细见API文档说明
+ The client communication class of Modbus-Tcp protocol is convenient for data interaction with the server. It supports standard function codes and also supports extended function codes. + The address is in rich text. For details, see the remarks. +
+ + 本客户端支持的标准的modbus协议,Modbus-Tcp及Modbus-Udp内置的消息号会进行自增,地址支持富文本格式,具体参考示例代码。
+ 读取线圈,输入线圈,寄存器,输入寄存器的方法中的读取长度对商业授权用户不限制,内部自动切割读取,结果合并。 +
+ + 本客户端支持的标准的modbus协议,Modbus-Tcp及Modbus-Udp内置的消息号会进行自增,比如我们想要控制消息号在0-1000之间自增,不能超过一千,可以写如下的代码: + + 在标准的Modbus协议里面,客户端发送消息ID给服务器,服务器是需要复制返回客户端的,在HSL里会默认进行检查操作,如果想要忽略消息ID一致性的检查,可以编写如下的方法。 + + + 地址共可以携带4个信息,常见的使用表示方式"s=2;x=3;100",对应的modbus报文是 02 03 00 64 00 01 的前四个字节,站号,功能码,起始地址,下面举例 + + 当读写int, uint, float, double, long, ulong类型的时候,支持动态指定数据格式,也就是 DataFormat 信息,本部分内容为商业授权用户专有,感谢支持。
+ ReadInt32("format=BADC;100") 指示使用BADC的格式来解析byte数组,从而获得int数据,同时支持和站号信息叠加,例如:ReadInt32("format=BADC;s=2;100") + + + 读取线圈 + ReadCoil("100")表示读取线圈100的值,ReadCoil("s=2;100")表示读取站号为2,线圈地址为100的值 + + + 读取离散输入 + ReadDiscrete("100")表示读取离散输入100的值,ReadDiscrete("s=2;100")表示读取站号为2,离散地址为100的值 + + + 读取寄存器 + ReadInt16("100")表示读取寄存器100的值,ReadInt16("s=2;100")表示读取站号为2,寄存器100的值 + + + 读取输入寄存器 + ReadInt16("x=4;100")表示读取输入寄存器100的值,ReadInt16("s=2;x=4;100")表示读取站号为2,输入寄存器100的值 + + + 读取寄存器的位 + ReadBool("100.0")表示读取寄存器100第0位的值,ReadBool("s=2;100.0")表示读取站号为2,寄存器100第0位的值,支持读连续的多个位 + + + 读取输入寄存器的位 + ReadBool("x=4;100.0")表示读取输入寄存器100第0位的值,ReadBool("s=2;x=4;100.0")表示读取站号为2,输入寄存器100第0位的值,支持读连续的多个位 + + + 对于写入来说也是一致的 + + + 写入线圈 + WriteCoil("100",true)表示读取线圈100的值,WriteCoil("s=2;100",true)表示读取站号为2,线圈地址为100的值 + + + 写入寄存器 + Write("100",(short)123)表示写寄存器100的值123,Write("s=2;100",(short)123)表示写入站号为2,寄存器100的值123 + + + 特殊说明部分:
+ 当碰到自定义的功能码时,比如读取功能码 07,写入功能码 08 的自定义寄存器时,地址可以这么写
+ ReadInt16("s=2;x=7;w=8;100")表示读取这个自定义寄存器地址 100 的数据,读取使用的是 07 功能码,写入使用的是 08 功能码,也就是说 w=8 可以强制指定写入的功能码信息
+ + + 01功能码 + ReadBool("100") + + + 02功能码 + ReadBool("x=2;100") + + + 03功能码 + Read("100") + + + 04功能码 + Read("x=4;100") + + + 05功能码 + Write("100", True) + + + 06功能码 + Write("100", (short)100);Write("100", (ushort)100) + + + 0F功能码 + Write("100", new bool[]{True}) 注意:这里和05功能码传递的参数类型不一样 + + + 10功能码 + 如果写一个short想用10功能码:Write("100", new short[]{100}) + + + 16功能码 + Write("100.2", True) 当写入bool值的方法里,地址格式变为字地址时,就使用16功能码,通过掩码的方式来修改寄存器的某一位, + 需要Modbus服务器支持,对于不支持该功能码的写入无效。 + + + 特别说明:调用写入 short 及 ushort 类型写入方法时,自动使用06功能码写入。需要需要使用 16 功能码写入 short 数值,可以参考下面的两种方式:
+ 1. modbus.Write("100", new short[]{ 1 });
+ 2. modbus.Write("w=16;100", (short)1); (这个地址读short也能读取到正确的值)
+ 基本的用法请参照下面的代码示例 + +
+
+ + + 实例化一个Modbus-Tcp协议的客户端对象
+ Instantiate a client object of the Modbus-Tcp protocol +
+
+ + + 指定服务器地址,端口号,客户端自己的站号来初始化
+ Specify the server address, port number, and client's own station number to initialize +
+ 服务器的Ip地址 + 服务器的端口号 + 客户端自身的站号 +
+ + + + + + + + + 将Modbus报文数据发送到当前的通道中,并从通道中接收Modbus的报文,通道将根据当前连接自动获取,本方法是线程安全的。
+ Send Modbus message data to the current channel, and receive Modbus messages from the channel. The channel will automatically obtain it according to the current connection. This method is thread-safe. +
+ 发送的完整的报文信息 + 接收到的Modbus报文信息 + + 需要注意的是,本方法的发送和接收都只需要输入Modbus核心报文,例如读取寄存器0的字数据 01 03 00 00 00 01,最前面的6个字节是自动添加的,收到的数据也是只有modbus核心报文,例如:01 03 02 00 00 , 所以在解析的时候需要注意。
+ It should be noted that the sending and receiving of this method only need to input the Modbus core message, for example, read the word data 01 03 00 00 00 01 of register 0, + the first 6 bytes are automatically added, and the received The data is also only modbus core messages, for example: 01 03 02 00 00, so you need to pay attention when parsing. +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 获取或设置起始的地址是否从0开始,默认为True
+ Gets or sets whether the starting address starts from 0. The default is True +
+ + 因为有些设备的起始地址是从1开始的,就要设置本属性为False + +
+ + + 获取或者重新修改服务器的默认站号信息,当然,你可以再读写的时候动态指定,参见备注
+ Get or modify the default station number information of the server. Of course, you can specify it dynamically when reading and writing, see note +
+ + 当你调用 ReadCoil("100") 时,对应的站号就是本属性的值,当你调用 ReadCoil("s=2;100") 时,就忽略本属性的值,读写寄存器的时候同理 + +
+ + + + + + 字符串数据是否按照字来反转,默认为False
+ Whether the string data is reversed according to words. The default is False. +
+ + 字符串按照2个字节的排列进行颠倒,根据实际情况进行设置 + +
+ + + + + + 获取modbus协议自增的消息号,你可以自定义modbus的消息号的规则,详细参见说明,也可以查找说明。
+ Get the message number incremented by the modbus protocol. You can customize the rules of the message number of the modbus. For details, please refer to the description of , or you can find the description of +
+
+ + + + + + + + + + + + 读取线圈,需要指定起始地址,如果富文本地址不指定,默认使用的功能码是 0x01
+ To read the coil, you need to specify the start address. If the rich text address is not specified, the default function code is 0x01. +
+ 起始地址,格式为"1234" + 带有成功标志的bool对象 +
+ + + 批量的读取线圈,需要指定起始地址,读取长度,如果富文本地址不指定,默认使用的功能码是 0x01
+ For batch reading coils, you need to specify the start address and read length. If the rich text address is not specified, the default function code is 0x01. +
+ 起始地址,格式为"1234" + 读取长度 + 带有成功标志的bool数组对象 +
+ + + 读取输入线圈,需要指定起始地址,如果富文本地址不指定,默认使用的功能码是 0x02
+ To read the input coil, you need to specify the start address. If the rich text address is not specified, the default function code is 0x02. +
+ 起始地址,格式为"1234" + 带有成功标志的bool对象 +
+ + + 批量的读取输入点,需要指定起始地址,读取长度,如果富文本地址不指定,默认使用的功能码是 0x02
+ To read input points in batches, you need to specify the start address and read length. If the rich text address is not specified, the default function code is 0x02 +
+ 起始地址,格式为"1234" + 读取长度 + 带有成功标志的bool数组对象 +
+ + + 从Modbus服务器批量读取寄存器的信息,需要指定起始地址,读取长度,如果富文本地址不指定,默认使用的功能码是 0x03,如果需要使用04功能码,那么地址就写成 x=4;100
+ To read the register information from the Modbus server in batches, you need to specify the start address and read length. If the rich text address is not specified, + the default function code is 0x03. If you need to use the 04 function code, the address is written as x = 4; 100 +
+ 起始地址,比如"100","x=4;100","s=1;100","s=1;x=4;100" + 读取的数量 + 带有成功标志的字节信息 + + 富地址格式,支持携带站号信息,功能码信息,具体参照类的示例代码 + + + 此处演示批量读取的示例 + + +
+ + + + + + 将数据写入到Modbus的寄存器上去,需要指定起始地址和数据内容,如果富文本地址不指定,默认使用的功能码是 0x10
+ To write data to Modbus registers, you need to specify the start address and data content. If the rich text address is not specified, the default function code is 0x10 +
+ 起始地址,比如"100","x=4;100","s=1;100","s=1;x=4;100" + 写入的数据,长度根据data的长度来指示 + 返回写入结果 + + 富地址格式,支持携带站号信息,功能码信息,具体参照类的示例代码 + + + 此处演示批量写入的示例 + + +
+ + + 将数据写入到Modbus的单个寄存器上去,需要指定起始地址和数据值,如果富文本地址不指定,默认使用的功能码是 0x06
+ To write data to a single register of Modbus, you need to specify the start address and data value. If the rich text address is not specified, the default function code is 0x06. +
+ 起始地址,比如"100","x=4;100","s=1;100","s=1;x=4;100" + 写入的short数据 + 是否写入成功 +
+ + + 将数据写入到Modbus的单个寄存器上去,需要指定起始地址和数据值,如果富文本地址不指定,默认使用的功能码是 0x06
+ To write data to a single register of Modbus, you need to specify the start address and data value. If the rich text address is not specified, the default function code is 0x06. +
+ 起始地址,比如"100","x=4;100","s=1;100","s=1;x=4;100" + 写入的ushort数据 + 是否写入成功 +
+ + + 向设备写入掩码数据,使用0x16功能码,需要确认对方是否支持相关的操作,掩码数据的操作主要针对寄存器。
+ To write mask data to the server, using the 0x16 function code, you need to confirm whether the other party supports related operations. + The operation of mask data is mainly directed to the register. +
+ 起始地址,起始地址,比如"100","x=4;100","s=1;100","s=1;x=4;100" + 等待与操作的掩码数据 + 等待或操作的掩码数据 + 是否写入成功 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 批量读取线圈或是离散的数据信息,需要指定地址和长度,具体的结果取决于实现,如果富文本地址不指定,默认使用的功能码是 0x01
+ To read coils or discrete data in batches, you need to specify the address and length. The specific result depends on the implementation. If the rich text address is not specified, the default function code is 0x01. +
+ 数据地址,比如 "1234" + 数据长度 + 带有成功标识的bool[]数组 +
+ + + 向线圈中写入bool数组,返回是否写入成功,如果富文本地址不指定,默认使用的功能码是 0x0F
+ Write the bool array to the coil, and return whether the writing is successful. If the rich text address is not specified, the default function code is 0x0F. +
+ 要写入的数据地址,比如"1234" + 要写入的实际数组 + 返回写入结果 +
+ + + 向线圈中写入bool数值,返回是否写入成功,如果富文本地址不指定,默认使用的功能码是 0x05, + 如果你的地址为字地址,例如100.2,那么将使用0x16的功能码,通过掩码的方式来修改寄存器的某一位,需要Modbus服务器支持,否则写入无效。
+ Write bool value to the coil and return whether the writing is successful. If the rich text address is not specified, the default function code is 0x05. + If your address is a word address, such as 100.2, then you will use the function code of 0x16 to modify a bit of the register through a mask. + It needs Modbus server support, otherwise the writing is invalid. +
+ 要写入的数据地址,比如"12345" + 要写入的实际数据 + 返回写入结果 +
+ + + + + + + + + + + + + + + Modbus的虚拟服务器,同时支持Tcp,Rtu,Ascii的机制,支持线圈,离散输入,寄存器和输入寄存器的读写操作,同时支持掩码写入功能,可以用来当做系统的数据交换池
+ Modbus virtual server supports Tcp and Rtu mechanisms at the same time, supports read and write operations of coils, discrete inputs, r + egisters and input registers, and supports mask write function, which can be used as a system data exchange pool +
+ + 可以基于本类实现一个功能复杂的modbus服务器,支持Modbus-Tcp,启动串口后,还支持Modbus-Rtu和Modbus-ASCII,会根据报文进行动态的适配。
+ 线圈,功能码对应01,05,15
+ 离散输入,功能码对应02,服务器写入离散输入的地址使用 x=2;100
+ 寄存器,功能码对应03,06,16
+ 输入寄存器,功能码对应04,输入寄存器在服务器写入使用地址 x=4;100
+ 掩码写入,功能码对应22,可以对字寄存器进行位操作
+ 特别说明1: 属性如果设置为 True 的话,则服务器为每一个站号(0-255)都创建一个数据区,客户端使用站号作为区分可以写入不同的数据区,服务器也可以读取不同数据区的数据,例如 s=2;100
+ 特别说明2: 如果多个modbus server使用485总线连接,那么属性 需要设置为 True +
+ + + 线圈,功能码对应01,05,15 + 离散输入,功能码对应02 + 寄存器,功能码对应03,06,16 + 输入寄存器,功能码对应04,输入寄存器在服务器端可以实现读写的操作 + 掩码写入,功能码对应22,可以对字寄存器进行位操作 + + 读写的地址格式为富文本地址,具体请参照下面的示例代码。 + + +
+ + + 实例化一个Modbus Tcp及Rtu的服务器,支持数据读写操作 + + + + + + + + + + + + + + 获取或设置是否对站号进行检测,当服务器只有一个站号的时候,设置为True表示客户端请求站号和服务器不一致的时候,拒绝返回数据给客户端,反之,始终会返回数据给客户端。
+ When the server has only one station number, setting True means that when the client requests that the station number is inconsistent with the server, + it refuses to return data to the client, and vice versa, it will always return data to the client. +
+
+ + + 获取或设置当前的TCP服务器是否使用modbus-rtu报文进行通信,如果设置为 True,那么客户端需要使用
+ Get or set whether the current TCP server uses modbus-rtu messages for communication. + If it is set to True, then the client needs to use +
+ + 需要注意的是,本属性设置为False时,客户端使用,否则,使用,不能混合使用 + +
+ + + 获取或设置两次请求直接的延时时间,单位毫秒,默认是0,不发生延时,设置为20的话,可以有效防止有客户端疯狂进行请求而导致服务器的CPU占用率上升。
+ Get or set the direct delay time of two requests, in milliseconds, the default is 0, no delay occurs, if it is set to 20, + it can effectively prevent the client from making crazy requests and causing the server's CPU usage to increase. +
+
+ + + 获取或设置是否启动站点数据隔离功能,默认为 False,也即虚拟服务器模拟一个站点服务器,客户端使用正确的站号才能通信。 + 当设置为 True 时,虚拟服务器模式256个站点,无论客户端使用的什么站点,都能读取或是写入对应站点里去。服务器同时也可以访问任意站点自身的数据。
+ Get or set whether to enable the site data isolation function, the default is False, that is, the virtual server simulates a site server, and the client can communicate with the correct site number. + When set to True, 256 sites in virtual server mode, no matter what site the client uses, can read or write to the corresponding site.The server can also access any site's own data. +
+ + 当启动站号隔离之后,服务器访问自身的站号2的数据,地址写为 s=2;100 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 写入寄存器数据,指定字节数据 + + 起始地址,示例:"100",如果是输入寄存器:"x=4;100" + 高位数据 + 地位数据 + + + + + + + + + + 创建特殊的功能标识,然后返回该信息
+ Create a special feature ID and return this information +
+ modbus核心报文 + 错误码 + 携带错误码的modbus报文 +
+ + + 创建返回消息
+ Create return message +
+ modbus核心报文 + 返回的实际数据内容 + 携带内容的modbus报文 +
+ + + 创建写入成功的反馈信号
+ Create feedback signal for successful write +
+ modbus核心报文 + 携带成功写入的信息 +
+ + + 新增一个数据监视的任务,针对的是寄存器地址的数据
+ Added a data monitoring task for data at register addresses +
+ 监视地址对象 +
+ + + 移除一个数据监视的任务
+ Remove a data monitoring task +
+ 监视地址对象 +
+ + + 在数据变更后,进行触发是否产生订阅
+ Whether to generate a subscription after triggering data changes +
+ 数据地址 + 修改之前的数 + 修改之后的数 +
+ + + 检测当前的Modbus接收的指定是否是合法的
+ Check if the current Modbus datad designation is valid +
+ 缓存数据 + 是否合格 +
+ + + Modbus核心数据交互方法,允许重写自己来实现,报文只剩下核心的Modbus信息,去除了MPAB报头信息
+ The Modbus core data interaction method allows you to rewrite it to achieve the message. + Only the core Modbus information is left in the message, and the MPAB header information is removed. +
+ 核心的Modbus报文 + 进行数据交互之后的结果 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Modbus-Udp协议的客户端通讯类,方便的和服务器进行数据交互,支持标准的功能码,也支持扩展的功能码实现,地址采用富文本的形式,详细见备注说明
+ The client communication class of Modbus-Udp protocol is convenient for data interaction with the server. It supports standard function codes and also supports extended function codes. + The address is in rich text. For details, see the remarks. +
+ + 本客户端支持的标准的modbus协议,Modbus-Tcp及Modbus-Udp内置的消息号会进行自增,地址支持富文本格式,具体参考示例代码。
+ 读取线圈,输入线圈,寄存器,输入寄存器的方法中的读取长度对商业授权用户不限制,内部自动切割读取,结果合并。 +
+ + + +
+ + + 实例化一个MOdbus-Udp协议的客户端对象
+ Instantiate a client object of the MOdbus-Udp protocol +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + /param> + + + /param> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 实例化一个ModbusUdp的服务器 + + + + + 获取或设置一次接收时的数据长度,默认2KB数据长度 + + + + + + + + 重新开始接收数据 + + + + + + + + 监视使用的数据缓存 + + + + + 地址 + + + + + 原有的值 + + + + + 新的值 + + + + + 关于MqttSyncClient实现的接口,从而实现了数据连接池的操作信息 + + + + + 根据连接的MQTT参数,实例化一个默认的对象
+ According to the connected MQTT parameters, instantiate a default object +
+ 连接的参数信息 +
+ + + 实例化一个默认的对象
+ Instantiate a default object +
+
+ + + + + + + + + + + + MQTT的连接对象 + + + + + + + + + + + Mqtt的一次完整消息内容,包含主题,负载数据,消息等级。
+ Mqtt's complete message content, including subject, payload data, message level. +
+
+ + + 这个字段表示应用消息分发的服务质量等级保证。分为,最多一次,最少一次,正好一次,只发不推送。
+ This field indicates the quality of service level guarantee for application message distribution. Divided into, at most once, at least once, exactly once +
+ + 在实际的开发中的情况下,最多一次是最省性能的,正好一次是最消耗性能的,如果应有场景为推送实时的数据,那么,最多一次的性能是最高的 + +
+ + + 主题名(Topic Name)用于识别有效载荷数据应该被发布到哪一个信息通道。
+ The Topic Name is used to identify which information channel the payload data should be published to. +
+ + UTF-8编码字符串中的字符数据必须是按照Unicode规范 [Unicode] 定义的和在RFC3629 [RFC3629] 中重申的有效的UTF-8格式。特别需要指出的是, + 这些数据不能包含字符码在U+D800和U+DFFF之间的数据。如果服务端或客户端收到了一个包含无效UTF-8字符的控制报文,它必须关闭网络连接 [MQTT-1.5.3-1]. + + PUBLISH报文中的主题名不能包含通配符 [MQTT-3.3.2-2]。 + +
+ + + 有效载荷包含将被发布的应用消息。数据的内容和格式是应用特定的。
+ The payload contains application messages to be published. The content and format of the data is application specific. +
+
+ + + 该消息是否在服务器端进行保留,详细的说明参照文档的备注
+ Whether the message is retained on the server. For details, refer to the remarks of the document. +
+ + 如果客户端发给服务端的PUBLISH报文的保留(RETAIN)标志被设置为1,服务端必须存储这个应用消息和它的服务质量等级(QoS), + 以便它可以被分发给未来的主题名匹配的订阅者 [MQTT-3.3.1-5]。一个新的订阅建立时,对每个匹配的主题名 + ,如果存在最近保留的消息,它必须被发送给这个订阅者 [MQTT-3.3.1-6]。如果服务端收到一条保留(RETAIN)标志为1的QoS 0消息, + 它必须丢弃之前为那个主题保留的任何消息。它应该将这个新的QoS 0消息当作那个主题的新保留消息,但是任何时候都可以选择丢弃它 — 如果这种情况发生了, + 那个主题将没有保留消息 [MQTT-3.3.1-7] + +
+ + + + + + Mqtt协议的客户端实现,支持订阅消息,发布消息,详细的使用例子参考api文档
+ The client implementation of the Mqtt protocol supports subscription messages and publishing messages. For detailed usage examples, refer to the api documentation. +
+ + 这是一个MQTT的客户端实现,参照MQTT协议的3.1.1版本设计实现的。服务器可以是其他的组件提供的,其他的可以参考示例
+ This is an MQTT client implementation, designed and implemented with reference to version 3.1.1 of the MQTT protocol. The server can be provided by other components. +
+ + + + + + + + + + 当我们在一个多窗体的客户端里使用了类,可能很多界面都需要订阅主题,显示一些实时数据信息。只由主窗体来订阅再把数据传递给子窗体却不是很容易操作。 + 所以在hsl里提供了更加便捷的操作方法。方便在每个子窗体界面中,订阅,显示,取消订阅操作。核心代码如下: + + 以下的例子是DEMO程序的一个例子代码,也可以作为参考 + + +
+ + + 实例化一个默认的对象 + + 配置信息 + + + + 连接服务器,如果连接失败,请稍候重试。
+ Connect to the server. If the connection fails, try again later. +
+ 连接是否成功 +
+ + + 关闭Mqtt服务器的连接。
+ Close the connection to the Mqtt server. +
+
+ + + + + + + + + 发布一个MQTT协议的消息到服务器。该消息包含主题,负载数据,消息等级,是否保留信息。
+ Publish an MQTT protocol message to the server. The message contains the subject, payload data, message level, and whether to retain information. +
+ 消息 + 发布结果 + + 参照 的示例说明。 + + + +
+ + + + + + 从服务器订阅一个或多个主题信息
+ Subscribe to one or more topics from the server +
+ 主题信息 + 订阅结果 + + 参照 的示例说明。 + + + +
+ + + + + + 向服务器订阅一个主题消息,可以指定订阅的主题数组,订阅的质量等级,还有消息标识符
+ To subscribe to a topic message from the server, you can specify the subscribed topic array, + the subscription quality level, and the message identifier +
+ 订阅的消息本体 + 是否订阅成功 +
+ + + 获取已经订阅的主题信息,方便针对不同的界面订阅不同的主题。
+ Get subscribed topic information, which is convenient for subscribing to different topics for different interfaces. +
+ 主题信息 + 订阅主题信息 +
+ + + 取消订阅多个主题信息,取消之后,当前的订阅数据就不在接收到,除非服务器强制推送。
+ Unsubscribe from multiple topic information. After cancellation, the current subscription data will not be received unless the server forces it to push it. +
+ 主题信息 + 取消订阅结果 + + 参照 的示例说明。 + + + +
+ + + 取消订阅指定的主题信息,取消之后,就不再接收当前主题的数据,除非服务器强制推送
+ Unsubscribe from the specified topic information. After cancellation, the data of the current topic will no longer be received unless the server forces push +
+ 主题信息 + 取消订阅结果 + + 参照 的示例说明。 + + + +
+ + + + + + + + + + + + + + + 当接收到Mqtt订阅的信息的时候触发
+ Triggered when receiving Mqtt subscription information +
+ 收到消息时候的client实例对象 + 主题信息 + 负载数据 +
+ + + 当接收到Mqtt订阅的信息的时候触发 + + + + + 当网络发生异常的时候触发的事件,用户应该在事件里进行重连服务器 + + + + + 连接服务器成功的委托
+ Connection server successfully delegated +
+
+ + + 当客户端连接成功触发事件,就算是重新连接服务器后,也是会触发的
+ The event is triggered when the client is connected successfully, even after reconnecting to the server. +
+
+ + + 释放当前的对象 + + + + + + + + + 获取当前的连接配置参数信息
+ Get current connection configuration parameter information +
+
+ + + 获取或设置是否启动定时器去检测当前客户端是否超时掉线。默认为 True
+ Get or set whether to start the timer to detect whether the current client timeout and disconnection. Default is True +
+
+ + + 获取或设置当前的服务器连接是否成功,定时获取本属性可用于实时更新连接状态信息。
+ Get or set whether the current server connection is successful or not. + This property can be obtained regularly and can be used to update the connection status information in real time. +
+
+ + + 获取当前的客户端对象已经订阅的所有的Topic信息
+ Get all Topic information that the current client object has subscribed to +
+
+ + + + + + 订阅的主题信息
+ Subscribed topic information +
+
+ + + 使用指定的主题初始化
+ Initialize with the specified theme +
+ 主题信息 +
+ + + 主题信息
+ topic information +
+
+ + + 主题被订阅的次数
+ The number of times the topic was subscribed +
+
+ + + 当接收到Mqtt订阅的信息的时候触发的事件
+ Event triggered when a message subscribed to by Mqtt is received +
+
+ + + 使用指定的参数,触发订阅主题的事件
+ Using the specified parameters, trigger the event of the subscribed topic +
+ 客户端会话信息 + 主题信息 + 数据负载 +
+ + + 增加一个订阅的计数信息,不需要手动调用,在 订阅主题之后,会自动增加
+ Add a subscription count information, no need to manually call it, it will be automatically added after subscribes to the topic +
+ 返回增加计数后的值 +
+ + + 减少一个订阅的计数信息,用户可以手动调用,比如判断是否是最后一次移除,然后决定是否通过 取消订阅主题
+ Reduce the count information of a subscription, the user can call it manually, such as judging whether it is the last removal, + and then decide whether to unsubscribe the topic through +
+ 返回减少计数后的值 +
+ + + + + + 来自客户端的一次消息的内容,当前类主要是在MQTT的服务端进行使用
+ The content of a message from the client. The current class is mainly used on the MQTT server +
+
+ + + 实例化一个默认的对象
+ Instantiate a default object +
+
+ + + 客户端的Id信息
+ Client Id information +
+
+ + + 当前的客户端的用户名
+ Username of the current client +
+
+ + + 获取或设置当前的消息是否取消发布,默认False,也就是发布出去
+ Get or set whether the current message is unpublished, the default is False, which means it is published +
+
+ + + 当前消息的生成时间
+ The generation time of the current message +
+
+ + + 当前消息的ID信息,在Qos大于0的时候,才是有值的 + + + + + 连接MQTT服务器的一些参数信息,适用消息发布订阅客户端以及同步请求客户端。
+ Some parameter information for connecting to the MQTT server is applicable to the message publishing and subscription client and the synchronization request client. +
+
+ + + 实例化一个默认的对象
+ Instantiate a default object +
+
+ + + Mqtt服务器的ip地址
+ IP address of Mqtt server +
+
+ + + 端口号。默认1883
+ The port number. Default 1883 +
+
+ + + 客户端的id的标识
+ ID of the client +
+ + 实际在传输的时候,采用的是UTF8编码的方式来实现。 + +
+ + + 连接到服务器的超时时间,默认是5秒,单位是毫秒
+ The timeout period for connecting to the server, the default is 5 seconds, the unit is milliseconds +
+
+ + + 遗嘱消息,为空或是主题为空则表示不使用遗嘱,该遗嘱对于 无效 + + + + + 登录服务器的凭证,包含用户名和密码,可以为空
+ The credentials for logging in to the server, including the username and password, can be null +
+
+ + + 获取或设置是否使用CA证书的方式来通信,当为空的时候,默认不使用证书,不为空则使用证书,需要传入证书的完整路径信息
+ Obtain or set whether to use the certificate authority to communicate, when empty, the default is not to use the certificate, + not empty to use the certificate, you need to pass in the full path information of the certificate +
+
+ + + 获取或设置是否使用 SSL/TLS 加密的方式来验证 + + + + + 在使用证书的情况下,获取或设置是否对服务器的证书进行检查并校验的操作,如果设置为True,也就是检查,安全性更高,反之不检查服务器的证书是否合法
+ In the case of using a certificate, obtain or set whether to check and verify the server's certificate, if set to True, + that is, check, the security is higher, and vice versa, the server's certificate is not checked +
+
+ + + 设置的参数,最小单位为1s,当超过设置的时间间隔没有发送数据的时候,必须发送PINGREQ报文,否则服务器认定为掉线。
+ The minimum unit of the set parameter is 1s. When no data is sent beyond the set time interval, the PINGREQ message must be sent, otherwise the server considers it to be offline. +
+ + 保持连接(Keep Alive)是一个以秒为单位的时间间隔,表示为一个16位的字,它是指在客户端传输完成一个控制报文的时刻到发送下一个报文的时刻, + 两者之间允许空闲的最大时间间隔。客户端负责保证控制报文发送的时间间隔不超过保持连接的值。如果没有任何其它的控制报文可以发送, + 客户端必须发送一个PINGREQ报文,详细参见 [MQTT-3.1.2-23] + +
+ + + 获取或是设置心跳时间的发送间隔。默认30秒钟
+ Get or set the heartbeat time interval. 30 seconds by default +
+
+ + + 是否清理会话,如果清理会话(CleanSession)标志被设置为1,客户端和服务端必须丢弃之前的任何会话并开始一个新的会话。 + 会话仅持续和网络连接同样长的时间。与这个会话关联的状态数据不能被任何之后的会话重用 [MQTT-3.1.2-6]。默认为清理会话。
+ Whether to clean the session. If the CleanSession flag is set to 1, the client and server must discard any previous session and start a new session. + The session only lasts as long as the network connection. The state data associated with this session cannot be reused by any subsequent sessions [MQTT-3.1.2-6]. + The default is to clean up the session. +
+
+ + + 获取或设置当前的连接是否加密处理,防止第三方对注册报文进行抓包处理,从而分析出用户名和密码,只适用于基于HslCommunication创建的MQTT Server。
+ Get or set whether the current connection is encrypted or not, to prevent the third party from capturing the registration message, + so as to analyze the user name and password. It is only applicable to the MQTT Server created based on HslCommunication. +
+
+ + + 获取当前设置的服务器的网址信息,或是IP地址信息 + + + + + 定义了Mqtt的相关的控制报文的信息 + + + + + 操作失败的信息返回 + + + + + 连接标识 + + + + + 连接返回的标识 + + + + + 发布消息 + + + + + QoS 1消息发布收到确认 + + + + + 发布收到(保证交付第一步) + + + + + 发布释放(保证交付第二步) + + + + + QoS 2消息发布完成(保证交互第三步) + + + + + 客户端订阅请求 + + + + + 订阅请求报文确认 + + + + + 客户端取消订阅请求 + + + + + 取消订阅报文确认 + + + + + 心跳请求 + + + + + 心跳响应 + + + + + 客户端断开连接 + + + + + 报告进度 + + + + + 文件传输中没有意义的标记 + + + + + 下载文件的命令,一次只能下载一个文件 + + + + + 上传文件的命令,一次只能上传一个文件 + + + + + 删除文件的命令,一次可以删除多个文件 + + + + + 删除目录的命令,目录下面的所有的文件都会被删除 + + + + + 遍历指定目录下所有的文件信息 + + + + + 遍历指定目录下所有的子目录信息 + + + + + 文件是否存在 + + + + + 指定目录的所有文件信息,包含文件数量,所有文件大小,最后的更新时间 + + + + + 指定目录的所有子目录的文件统计信息,每个文件夹的文件数量,所有文件大小,最后更新时间 + + + + + Mqtt协议的验证对象,包含用户名和密码
+ Authentication object of Mqtt protocol, including username and password +
+
+ + + 实例化一个默认的对象
+ Instantiate a default object +
+
+ + + 实例化指定的用户名和密码的对象
+ Instantiates an object with the specified username and password +
+ 用户名 + 密码 +
+ + + 获取或设置用户名
+ Get or set username +
+
+ + + 获取或设置密码
+ Get or set password +
+
+ + + + + + Mqtt协议的辅助类,提供了一些协议相关的基础方法,方便客户端和服务器端一起调用。
+ The auxiliary class of the Mqtt protocol provides some protocol-related basic methods for the client and server to call together. +
+
+ + + 根据数据的总长度,计算出剩余的数据长度信息
+ According to the total length of the data, calculate the remaining data length information +
+ 数据的总长度 + 计算结果 +
+ + + 将一个数据打包成一个mqtt协议的内容
+ Pack a piece of data into a mqtt protocol +
+ 控制码 + 标记 + 可变头的字节内容 + 负载数据 + AES数据加密对象 + 带有是否成功的结果对象 +
+ + + 将一个数据打包成一个mqtt协议的内容
+ Pack a piece of data into a mqtt protocol +
+ 控制码加标记码 + 可变头的字节内容 + 负载数据 + AES数据加密对象 + 带有是否成功的结果对象 +
+ + + 将字符串打包成utf8编码,并且带有2个字节的表示长度的信息
+ Pack the string into utf8 encoding, and with 2 bytes of length information +
+ 文本消息 + 打包之后的信息 +
+ + + + + + 从MQTT的缓存信息里,提取文本信息
+ Extract text information from MQTT cache information +
+ Mqtt的报文 + 索引 + +
+ + + 从MQTT的缓存信息里,提取文本信息
+ Extract text information from MQTT cache information +
+ Mqtt的报文 + 索引 + 订阅的主题信息 + 订阅的QOs信息 + +
+ + + 从MQTT的缓存信息里,提取长度信息
+ Extract length information from MQTT cache information +
+ Mqtt的报文 + 索引 + +
+ + + 从MQTT的缓存信息里,提取长度信息
+ Extract length information from MQTT cache information +
+ 数据信息 + +
+ + + 创建MQTT连接服务器的报文信息
+ Create MQTT connection server message information +
+ 连接配置 + 协议的内容 + 数据加密对象 + 返回是否成功的信息 +
+ + + 根据服务器返回的信息判断当前的连接是否是可用的
+ According to the information returned by the server to determine whether the current connection is available +
+ 功能码 + 数据内容 + 是否可用的连接 +
+ + + 获取当前的错误的描述信息
+ Get a description of the current error +
+ 状态信息 + 描述信息 +
+ + + 创建Mqtt发送消息的命令
+ Create Mqtt command to send messages +
+ 封装后的消息内容 + AES数据加密对象 + 结果内容 +
+ + + 创建Mqtt发送消息的命令
+ Create Mqtt command to send messages +
+ 主题消息内容 + 数据负载 + AES数据加密对象 + 结果内容 +
+ + + 创建Mqtt订阅消息的命令
+ Command to create Mqtt subscription message +
+ 订阅的主题 + 结果内容 +
+ + + 创建Mqtt取消订阅消息的命令
+ Create Mqtt unsubscribe message command +
+ 订阅的主题 + 结果内容 +
+ + + 解析从MQTT接受的客户端信息,解析成实际的Topic数据及Payload数据
+ Parse the client information received from MQTT and parse it into actual Topic data and Payload data +
+ MQTT的命令码 + 接收的MQTT原始的消息内容 + AES数据加密信息 + 解析的数据结果信息 +
+ + + 使用指定的对象来返回网络的API接口,前提是传入的数据为json参数,返回的数据为json数据,详细参照说明
+ Use the specified object to return the API interface of the network, + provided that the incoming data is json parameters and the returned data is json data, + please refer to the description for details +
+ 当前的对话状态 + 当前传入的消息内容 + 等待解析的api解析的对象 + 等待返回客户的结果 +
+ + + 使用指定的对象来返回网络的API接口,前提是传入的数据为json参数,返回的数据为json数据,详细参照说明
+ Use the specified object to return the API interface of the network, + provided that the incoming data is json parameters and the returned data is json data, + please refer to the description for details +
+ 当前的对话状态 + 当前传入的消息内容 + 当前已经解析好的Api内容对象 + 等待返回客户的结果 +
+ + + + + + 根据当前的对象定义的方法信息,获取到所有支持ApiTopic的方法列表信息,包含API名称,示例参数数据,描述信息。
+ According to the method information defined by the current object, the list information of all methods that support ApiTopic is obtained, + including the API name, sample parameter data, and description information. +
+ 指定的ApiTopic的前缀,可以理解为控制器,如果为空,就不携带控制器。 + 实际的等待解析的对象 + 默认的权限特性 + 返回所有API说明的列表,类型为 +
+ + + 根据当前的方法的委托信息和类对象,生成的API对象信息。 + + Api头信息 + 方法的委托 + 当前注册的API的源对象 + 默认的权限特性 + 返回是否成功的结果对象 + + + + 根据当前的方法的委托信息和类对象,生成的API对象信息。 + + Api头信息 + 方法的委托 + 当前注册的API的源对象 + 默认的权限特性 + 返回是否成功的结果对象 + + + + 判断当前服务器的实际的 topic 的主题,是否满足通配符格式的订阅主题 subTopic + + 服务器的实际的主题信息 + 客户端订阅的基于通配符的格式 + 如果返回True, 说明当前匹配成功,应该发送订阅操作 + + + + 基于MQTT协议,从网络套接字中接收剩余的数据长度
+ Receives the remaining data length from the network socket based on the MQTT protocol +
+ 当前的管道类型 + 接收数据的方法 + 实际的管道对象信息 + 网络中剩余的长度数据 +
+ + + 接收一条完整的MQTT协议的报文信息,包含控制码和负载数据
+ Receive a message of a completed MQTT protocol, including control code and payload data +
+ 当前的管道类型 + 接收数据的方法 + 实际的管道对象信息 + 超时时间 + 进度报告,第一个参数是已完成的字节数量,第二个参数是总字节数量。 + 结果数据内容 +
+ + + + + + + + + Mqtt发送的消息封装对象,是对 对象的封装,添加了序号,还有是否重发的信息
+ The message encapsulation object sent by Mqtt is an encapsulation of the object, with the serial number added, and whether to retransmit +
+
+ + + 实例化一个默认的对象
+ Instantiate a default object +
+
+ + + 是否第一次发送数据信息
+ Whether to send data information for the first time +
+
+ + + 当前的消息的标识符,当质量等级为0的时候,不需要重发以及考虑标识情况
+ The identifier of the current message, when the quality level is 0, do not need to retransmit and consider the identification situation +
+
+ + + 当前发布消息携带的mqtt的应用消息,包含主题,消息等级,负载。
+ The application message of mqtt carried in the current published message, including the subject, message level, and load. +
+
+ + + Mqtt消息的质量等级
+ Mqtt message quality level +
+
+ + + 最多一次 + + + + + 最少一次 + + + + + 只有一次 + + + + + 消息只发送到服务器而不触发发布订阅,该消息质量等级只对HSL的MQTT服务器有效
+ The message is only sent to the server without triggering publish and subscribe, the message quality level is only valid for the HSL MQTT server +
+
+ + + 基于MRPC实现的远程设备访问的接口,实现了和基础PLC一样的访问功能,适用的设备为 将PLC实际的通信对象注册为 RPC 接口服务。
+ The interface for remote device access based on MRPC implements the same access function as the basic PLC. The applicable device is to register the actual communication object of the PLC as an RPC interface service. +
+ + 什么时候会用到本设备对象呢?如果你得PLC端口只有一个,只能支持一个连接,但是实际通信的客户端不止一个时,就可以使用本类实现一对多通信。或是你希望在最终通信的客户端和PLC之间做个隔离,并增加安全校验。详细的例子参考API文档。
+ When will this device object be used? If you have only one PLC port and can only support one connection, but there are more than one client for actual communication, you can use this class to implement one-to-many communication. + Or you want to isolate the final communication client from the PLC and add security checks. For a detailed example, refer to the API documentation. +
+ + 如何和服务器进行配套调用使用呢?先在服务器端创建服务,并注册Api接口对象 + + 然后客户端就支持多连接了,客户端的代码如下 + + +
+ + + 实例化一个MQTT的同步客户端
+ Instantiate an MQTT synchronization client +
+ 连接的参数信息,可以指定IP地址,端口,账户名,密码,客户端ID信息 + 设备关联的主题信息 +
+ + + 通过指定的ip地址及端口来实例化一个同步的MQTT客户端
+ Instantiate a synchronized MQTT client with the specified IP address and port +
+ IP地址信息 + 端口号信息 + 设备关联的主题信息 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 一个Mqtt的服务器类对象,本服务器支持发布订阅操作,支持从服务器强制推送数据,支持往指定的客户端推送,支持基于一问一答的远程过程调用(RPC)的数据交互,支持文件上传下载。根据这些功能从而定制化出满足各个场景的服务器,详细的使用说明可以参见代码api文档示例。
+ An Mqtt server class object. This server supports publish and subscribe operations, supports forced push data from the server, + supports push to designated clients, supports data interaction based on one-question-one-answer remote procedure calls (RPC), + and supports file upload and download . According to these functions, the server can be customized to meet various scenarios. + For detailed instructions, please refer to the code api document example. +
+ + 本MQTT服务器功能丰富,可以同时实现,用户名密码验证,在线客户端的管理,数据订阅推送,单纯的数据收发,心跳检测,订阅通配符,同步数据访问,文件上传,下载,删除,遍历,详细参照下面的示例说明
+ 通配符请查看属性,规则参考:http://public.dhe.ibm.com/software/dw/webservices/ws-mqtt/mqtt-v3r1.html#appendix-a +
+ + 最简单的使用,就是实例化,启动服务即可 + + 当然了,我们可以稍微的复杂一点,加一个功能,验证连接的客户端操作 + + 我们可以对ClientID,用户名,密码进行验证,那么我们可以动态修改client id么?比如用户名密码验证成功后,client ID我想设置为权限等级。 + + 如果我想强制该客户端不能主动发布主题,可以这么操作。 + + 你也可以对clientid进行过滤验证,只要结果返回不是0,就可以了。接下来我们实现一个功能,所有客户端的发布的消息在控制台打印出来, + + 捕获客户端刚刚上线的时候,方便我们进行一些额外的操作信息。下面的意思就是返回一个数据,将数据发送到指定的会话内容上去 + + 下面演示如何从服务器端发布数据信息,包括多种发布的方法,消息是否驻留,详细看说明即可 + + 下面演示如何支持同步网络访问,当客户端是同步网络访问时,协议内容会变成HUSL,即被视为同步客户端,进行相关的操作,主要进行远程调用RPC,以及查询MQTT的主题列表。 + + 如果需要查看在线信息,可以随时获取属性,如果需要查看报文信息,可以实例化日志,参考日志的说明即可。

+ 针对上面同步网络访问,虽然比较灵活,但是什么都要自己控制,无疑增加了代码的复杂度,举个例子,当你的topic分类很多的时候,已经客户端协议多个参数的时候,需要大量的手动解析的代码, + 影响代码美观,而且让代码更加的杂乱,除此之外,还有个巨大的麻烦,服务器提供了很多的topic处理程序(可以换个称呼,暴露的API接口), + 客户端没法清晰的浏览到,需要查找服务器代码才能知晓,而且服务器更新了接口,客户端有需要同步查看服务器的代码才行,以及做权限控制也很麻烦。
+ 所以在Hsl里面的MQTT服务器,提供了注册API接口的功能,只需要一行注册代码,你的类的方法自动就会变为API解析,所有的参数都是同步解析的,如果你返回的是 + OperateResult<T>类型对象,还支持是否成功的结果报告,否则一律视为json字符串,返回给调用方。 + + 如果需要查看在线信息,可以随时获取属性,如果需要查看报文信息,可以实例化日志,参考日志的说明即可。

+ 最后介绍一下文件管理服务是如何启动的,在启动了文件管理服务之后,其匹配的客户端 就可以上传下载,遍历文件了。 + 而服务器端做的就是启用服务,如果你需要一些更加自由的权限控制,比如某个账户只能下载,不能其他操作,都是可以实现的。更加多的示例参考DEMO程序。 + +
+
+ + + 实例化一个MQTT协议的服务器
+ Instantiate a MQTT protocol server +
+ + RSA秘钥对象,默认为空,表示使用随机生成的秘钥信息,如果需要自定义的RSA密钥,则需要实例化当前参数对象,具体通信的时候加密与否,取决于客户端连接的方式。
+ The RSA key object, which is empty by default, indicates that the randomly generated key information is used. If a custom RSA key is required, + the current parameter object needs to be instantiated. Whether the specific communication is encrypted or not depends on the way the client connects. . + +
+ + + + + + + + + + + + 将消息进行驻留到内存词典,方便进行其他的功能操作。 + + 消息的主题 + 当前的数据负载 + + + + 将消息进行驻留到内存词典,方便进行其他的功能操作。 + + 消息的主题 + 当前的Mqtt消息 + + + + 向指定的客户端发送主题及负载数据
+ Sends the topic and payload data to the specified client +
+ 会话内容 + 主题 + 消息内容 +
+ + + 使用指定的规则向客户端发布主题及负载数据,可以根据会话的登录用户名,客户端ID信息进行筛选,例如只发布用户名admin的账户:( session ) => session.UserName == "admin"
+ Use the specified rules to publish topic and load data to the client, which can be filtered according to the session login user name and client ID information. + For example, only the account with the user name admin is published: ( session ) => session.UserName == "admin" +
+ 主题 + 消息内容 + 是否在服务器驻留 + 会话的检查委托 +
+ + + 从服务器向订阅了指定的主题的客户端发送消息,默认消息不驻留
+ Sends a message from the server to a client that subscribes to the specified topic; the default message does not retain +
+ 主题 + 消息内容 + 指示消息是否驻留 +
+ + + 向所有的客户端强制发送主题及负载数据,默认消息不驻留
+ Send subject and payload data to all clients compulsively, and the default message does not retain +
+ 主题 + 消息内容 + 指示消息是否驻留 +
+ + + 向指定的客户端ID强制发送消息,默认消息不驻留
+ Forces a message to the specified client ID, and the default message does not retain +
+ 指定的客户端ID信息 + 主题 + 消息内容 + 指示消息是否驻留 +
+ + + 向客户端发布一个进度报告的信息,仅用于同步网络的时候才支持进度报告,将进度及消息发送给客户端,比如你的服务器需要分成5个部分完成,可以按照百分比提示给客户端当前服务器发生了什么
+ Publish the information of a progress report to the client. The progress report is only supported when the network is synchronized. + The progress and the message are sent to the client. For example, your server needs to be divided into 5 parts to complete. + You can prompt the client according to the percentage. What happened to the server +
+ 当前的网络会话 + 回发客户端的关键数据,可以是百分比字符串,甚至是自定义的任意功能 + 数据消息 +
+ + + 向客户端发布一个失败的操作信息,仅用于同步网络的时候反馈失败结果,将错误的信息反馈回客户端,客户端就知道服务器发生了什么,为什么反馈失败。
+ Publish a failed operation information to the client, which is only used to feed back the failure result when synchronizing the network. + If the error information is fed back to the client, the client will know what happened to the server and why the feedback failed. +
+ 当前的网络会话 + 错误的消息文本信息 +
+ + + 向客户端发布一个操作结果的信息,仅用于同步网络的时候反馈操作结果,该操作可能成功,可能失败,客户端就知道服务器发生了什么,以及结果如何。
+ Publish an operation result information to the client, which is only used to feed back the operation result when synchronizing the network. + The operation may succeed or fail, and the client knows what happened to the server and the result. +
+ 当前的网络会话 + 结果对象内容 +
+ + + 使用指定的对象来返回网络的API接口,前提是传入的数据为json参数,返回的数据为 OperateResult<string> 数据,详细参照说明
+ Use the specified object to return the API interface of the network, + provided that the incoming data is json parameters and the returned data is OperateResult<string> data, + please refer to the description for details +
+ 当前的会话内容 + 客户端发送的消息,其中的payload将会解析为一个json字符串,然后提取参数信息。 + 当前的对象的内容信息 +
+ + + 获取当前所有注册的RPC接口信息,将返回一个数据列表。
+ Get all currently registered RPC interface information, and a data list will be returned. +
+ 信息列表 +
+ + + 注册一个RPC的服务接口,可以指定当前的控制器名称,以及提供RPC服务的原始对象,指定统一的权限控制。
+ Register an RPC service interface, you can specify the current controller name, + and the original object that provides the RPC service, Specify unified access control +
+ + 如果设置了的参数信息,那么请确保调用时获取了企业商业授权的权限,否则,只能使用24小时,然后因为权限问题报错。 + + 前置的接口信息,可以理解为MVC模式的控制器 + 原始对象信息 + 统一的权限访问配置,将会覆盖单个方法的权限控制。 +
+ + + 注册一个RPC的服务接口,可以指定当前的控制器名称,以及提供RPC服务的原始对象
+ Register an RPC service interface, you can specify the current controller name, + and the original object that provides the RPC service +
+ 前置的接口信息,可以理解为MVC模式的控制器 + 原始对象信息 +
+ + + + + + 启动文件服务功能,协议头为FILE,需要指定服务器存储的文件路径
+ Start the file service function, the protocol header is FILE, you need to specify the file path stored by the server +
+ 文件的存储路径 +
+ + + 关闭文件服务功能 + + + + + 获取当前的针对文件夹的文件管理容器的数量
+ Get the current number of file management containers for the folder +
+
+ + + 获取当前实时的文件上传下载的监控信息,操作的客户端信息,文件分类,文件名,上传或下载的速度等
+ Obtain current real-time file upload and download monitoring information, operating client information, file classification, file name, upload or download speed, etc. +
+ 文件的监控信息 +
+ + + 当客户端进行文件操作时,校验客户端合法性的委托,操作码具体查看的常量值
+ When client performing file operations, verify the legitimacy of the client, and check the constant value of for the operation code. +
+ 会话状态 + 操作码 + 分类信息 + 文件名 + 是否成功 +
+ + + 当客户端进行文件操作时,校验客户端合法性的事件,操作码具体查看的常量值
+ When client performing file operations, it is an event to verify the legitimacy of the client. For the operation code, check the constant value of +
+
+ + + 从套接字接收文件并保存,更新文件列表 + + 当前的会话信息 + 保存的信息 + 当前的委托信息 + 是否成功的结果对象 + + + + 返回相对路径的名称 + + 文件的分类路径信息 + 文件名 + 是否成功的结果对象 + + + + 返回服务器的绝对路径,包含根目录的信息 [Root Dir][A][B][C]... 信息 + + 文件的路径分类信息 + 是否成功的结果对象 + + + + 返回服务器的绝对路径,包含根目录的信息 [Root Dir][A][B][C]...[FileName] 信息 + + 路径分类信息 + 文件名 + 是否成功的结果对象 + + + + 根据文件的显示名称转化为真实存储的名称,例如 123.txt 获取到在文件服务器里映射的文件名称,例如返回 b35a11ec533147ca80c7f7d1713f015b7909 + + 文件的分类信息 + 文件显示名称 + 是否成功的结果对象 + + + + 获取当前目录的文件列表管理容器,如果没有会自动创建,通过该容器可以实现对当前目录的文件进行访问
+ Get the file list management container of the current directory. If not, it will be created automatically. + Through this container, you can access files in the current directory. +
+ 路径信息 + 是否创建容器,当没有发现该路径的容器的情况 + 文件管理容器信息 +
+ + + 根据路径信息获取到文件列表管理容器,如果返回空,表示不存在。
+ The file list management container is obtained according to the path information. If the return is empty, it means that it does not exist. +
+ 文件路径信息 + 文件列表管理容器 +
+ + + 获取文件夹的所有文件夹列表 + + 分类信息 + 文件夹列表 + + + + 获取当前文件的读写锁,如果没有会自动创建,文件名应该是guid文件名,例如 b35a11ec533147ca80c7f7d1713f015b7909
+ Acquire the read-write lock of the current file. If not, it will be created automatically. + The file name should be the guid file name, for example, b35a11ec533147ca80c7f7d1713f015b7909 +
+ 完整的文件路径 + 返回携带文件信息的读写锁 +
+ + + 检查文件夹是否存在,不存在就创建 + + + + + 删除已经存在的文件信息,文件的名称需要是guid名称,例如 b35a11ec533147ca80c7f7d1713f015b7909 + + 文件的路径 + 文件的guid名称,例如 b35a11ec533147ca80c7f7d1713f015b7909 + + + + 删除已经存在的文件信息,文件的名称需要是guid名称,例如 b35a11ec533147ca80c7f7d1713f015b7909 + + 文件的路径 + 文件的guid名称,例如 b35a11ec533147ca80c7f7d1713f015b7909 + + + + 文件变化的委托信息 + + 当前的会话信息,包含用户的基本信息 + 当前的文件操作信息,具体指示上传,下载,删除操作 + + + + 文件变化的事件,当文件上传的时候,文件下载的时候,文件被删除的时候触发。
+ The file change event is triggered when the file is uploaded, when the file is downloaded, or when the file is deleted. +
+
+ + + 让MQTT客户端正常下线,调用本方法即可自由控制会话客户端强制下线操作。 + + 当前的会话信息 + 当前下线的原因,如果没有,代表正常下线 + + + + Mqtt的消息收到委托 + + 当前会话的内容 + Mqtt的消息 + + + + 当收到客户端发来的消息时触发
+ Triggered when a message is received from the client +
+
+ + + 当前mqtt客户端连接上服务器的事件委托 + + 当前的会话对象 + + + + Mqtt的客户端连接上来时触发
+ Triggered when Mqtt client connects +
+
+ + + Mqtt的客户端下线时触发
+ Triggered when Mqtt client connects +
+
+ + + 验证的委托 + + 当前的MQTT的会话内容 + 客户端的id + 用户名 + 密码 + 0则是通过,否则,就是连接失败 + + + + 当客户端连接时,触发的验证事件
+ Validation event triggered when the client connects +
+
+ + + + + + 获取或设置是否启用订阅主题通配符的功能,默认为 False
+ Gets or sets whether to enable the function of subscribing to the topic wildcard, the default is False +
+ + 启动之后,通配符示例:finance/stock/ibm/#; finance/+; '#' 是匹配所有主题,'+' 是匹配一级主题树。
+ 通配符的规则参考如下的网址:http://public.dhe.ibm.com/software/dw/webservices/ws-mqtt/mqtt-v3r1.html#appendix-a +
+
+ + + 获取当前的在线的客户端数量
+ Gets the number of clients currently online +
+
+ + + 获得当前所有的在线的MQTT客户端信息,包括异步的客户端及同步请求的客户端。
+ Obtain all current online MQTT client information, including asynchronous client and synchronous request client. +
+
+ + + 获得当前异步客户端在线的MQTT客户端信息。
+ Get the MQTT client information of the current asynchronous client online. +
+
+ + + 获得当前同步客户端在线的MQTT客户端信息,如果客户端是短连接,将难以捕获在在线信息。
+ Obtain the MQTT client information of the current synchronization client online. If the client is a short connection, it will be difficult to capture the online information.
+
+
+ + + 删除服务器里的指定主题的驻留消息。
+ Delete the resident message of the specified topic in the server. +
+ 等待删除的主题关键字 +
+ + + 获取所有的驻留的消息的主题,如果消息发布的时候没有使用Retain属性,就无法通过本方法查到
+ Get the subject of all resident messages. If the Retain attribute is not used when the message is published, it cannot be found by this method +
+ 主题的数组 +
+ + + 获取订阅了某个主题的所有的会话列表信息
+ Get all the conversation list information subscribed to a topic +
+ 主题信息 + 会话列表 +
+ + + 释放当前的对象 + + + + + + + + + + + + Mqtt的会话信息,包含了一些基本的信息内容,客户端的IP地址及端口,Client ID,用户名,活动时间,是否允许发布数据等等
+ Mqtt's session information includes some basic information content, the client's IP address and port, Client ID, user name, activity time, whether it is allowed to publish data, etc. +
+
+ + + 实例化一个对象,指定ip地址及端口,以及协议内容
+ Instantiate an object, specify ip address and port, and protocol content +
+ 远程客户端的IP地址 + 协议信息 +
+ + + 远程的ip地址端口信息
+ Remote ip address port information +
+
+ + + 当前接收的客户端ID信息
+ Client ID information currently received +
+
+ + + 当前客户端的激活时间
+ The activation time of the current client +
+
+ + + 获取当前的客户端的上线时间
+ Get the online time of the current client +
+
+ + + 两次活动的最小时间间隔
+ Minimum time interval between two activities +
+
+ + + 当前客户端绑定的套接字对象 + + + + + 当前客户端订阅的所有的Topic信息
+ All Topic information subscribed by the current client +
+
+ + + 当前的用户名
+ Current username +
+
+ + + 当前的协议信息,一般为 "MQTT",如果是同步客户端那么是 "HUSL",如果是文件客户端就是 "FILE"
+ The current protocol information, generally "MQTT", if it is a synchronous client then it is "HUSL", if it is a file client it is "FILE" +
+
+ + + 遗嘱主题
+ will topic +
+ + 当前的会话如果因为非正常原因下线的时候,服务器立即发布该客户端的遗嘱主题及数据信息 + +
+ + + 遗嘱的消息内容
+ The message content of the will +
+ + 当前的会话如果因为非正常原因下线的时候,服务器立即发布该客户端的遗嘱主题及数据信息 + +
+ + + 获取或设置当前的会话是否拥有开发者权限,在开发者权限下,可以遍历接口信息,默认所有的会话都支持开发者权限,如果需要屏蔽,则需要在会话登录时,将本属性值设置为 False
+ Get or set whether the current session has developer permission. Under developer permission, + you can traverse the interface information. By default, all sessions support developer permission. If you need to block, you need to set this attribute value to false +
+
+ + + 获取设置客户端的加密信息 + + + + + 当前的会话信息关联的自定义信息
+ Custom information associated with the current session information +
+
+ + + 获取或设置当前的MQTT客户端是否允许发布消息,默认为False,如果设置为True,就是禁止发布消息,服务器不会触发收到消息的事件。
+ Gets or sets whether the current MQTT client is allowed to publish messages, the default is False, + if set to True, it is forbidden to publish messages, The server does not trigger the event of receiving a message. +
+
+ + + 检查当前的会话对象里是否订阅了指定的主题内容
+ Check whether the specified topic content is subscribed in the current session object +
+ 主题信息 + 订阅的主题是否使用了通配符 + 如果订阅了,返回 True, 否则,返回 False +
+ + + 获取当前客户端订阅的所有的Topic信息
+ Get all Topic information subscribed by the current client +
+ 主题列表 +
+ + + 当前的会话信息新增一个订阅的主题信息
+ The current session information adds a subscribed topic information +
+ 主题的信息 +
+ + + 当前的会话信息新增多个订阅的主题信息
+ The current session information adds multiple subscribed topic information +
+ 主题的信息 +
+ + + 移除会话信息的一个订阅的主题 + + 主题 + + + + 移除会话信息的一个订阅的主题
+ Remove a subscribed topic from session information +
+ 主题 +
+ + + 获取当前的会话信息,包含在线时间的信息
+ Get current session information, including online time information +
+ 会话信息,包含在线时间 +
+ + + + + + 订阅的消息类,用于客户端向服务器请求订阅的信息
+ Subscribed message class, used by the client to request subscription information from the server +
+
+ + + 实例化一个默认的对象
+ Instantiate a default object +
+
+ + + 这个字段表示应用消息分发的服务质量等级保证。分为,最多一次,最少一次,正好一次
+ This field indicates the quality of service guarantee for application message distribution. Divided into, at most once, at least once, exactly once +
+ + 在实际的开发中的情况下,最多一次是最省性能的,正好一次是最消耗性能的,如果应有场景为推送实时的数据,那么,最多一次的性能是最高的 + +
+ + + 当前的消息的标识符,当质量等级为0的时候,不需要重发以及考虑标识情况
+ The identifier of the current message, when the quality level is 0, do not need to retransmit and consider the identification situation +
+
+ + + 当前订阅的所有的主题的数组信息
+ Array information of all topics currently subscribed +
+
+ + + + + + 基于MQTT协议的同步访问的客户端程序,支持以同步的方式访问服务器的数据信息,并及时的反馈结果,当服务器启动文件功能时,也支持文件的上传,下载,删除操作等。
+ The client program based on MQTT protocol for synchronous access supports synchronous access to the server's data information and timely feedback of results, + When the server starts the file function, it also supports file upload, download, and delete operations. +
+ + 在最新的V10.2.0及以上版本中,本客户端支持加密模式,启用加密模式后,就无法通过抓包的报文来分析出用户名密码,以及通信的数据细节,详细可以参考API文档。 + + + + + + + + 当MqttServer注册了远程RPC接口的时候,例如将一个plc对象注册是接口对象,或是自定义的接口内容 + + 服务器都有什么RPC接口呢?可以通过下面的方式知道 + + 关于加密模式,在不加密的情况下,用户名及密码,还有请求的数据信息会被第三方软件窃取,从而泄露一些关键的数据信息,如果使用了HslCommunicationV10.2.0版本以上创建的MQTTServer, + 那么可以在客户端使用加密模式,加密使用RSA+AES混合加密,密钥动态生成,在保证效率的同时,具有很高的安全性。客户端使用加密如下: + + 下面演示文件部分的功能的接口方法,主要包含,上传,下载,删除,遍历操作 + + 在实际的窗体界面开发中,会更加的复杂,有个按钮点击下载,还需要支持取消下载操作。可以参考如下的代码:
+ + + 在实际的窗体界面开发中,会更加的复杂,有个按钮点击上传,还需要支持取消上传操作。可以参考如下的代码:
+ + + + + 上述的两个遍历的方法,就可以遍历出服务器的所有目录和文件了,具体可以参考 Demo 的MQTT文件客户端的演示界面。 +
+
+ + + 实例化一个MQTT的同步客户端
+ Instantiate an MQTT synchronization client +
+ 连接的参数信息,可以指定IP地址,端口,账户名,密码,客户端ID信息 +
+ + + 通过指定的ip地址及端口来实例化一个同步的MQTT客户端
+ Instantiate a synchronized MQTT client with the specified IP address and port +
+ IP地址信息 + 端口号信息 +
+ + + 通过指定的ip地址及端口来实例化一个同步的MQTT客户端
+ Instantiate a synchronized MQTT client with the specified IP address and port +
+ IP地址信息 + 端口号信息 +
+ + + + + + + + + + + + + + + 从MQTT服务器同步读取数据,将payload发送到服务器,然后从服务器返回相关的数据,支持数据发送进度报告,服务器执行进度报告,接收数据进度报告操作
+ Synchronously read data from the MQTT server, send the payload to the server, and then return relevant data from the server, + support data transmission progress report, the server executes the progress report, and receives the data progress report +
+ + 进度报告可以实现一个比较有意思的功能,可以用来数据的上传和下载,提供一个友好的进度条,因为网络的好坏通常是不确定的。 + + 主题信息 + 负载数据 + 发送数据给服务器时的进度报告,第一个参数为已发送数据,第二个参数为总发送数据 + 服务器处理数据的进度报告,第一个参数Topic自定义,通常用来传送操作百分比,第二个参数自定义,通常用来表示服务器消息 + 从服务器接收数据的进度报告,第一个参数为已接收数据,第二个参数为总接收数据 + 服务器返回的数据信息 +
+ + + 从MQTT服务器同步读取数据,将指定编码的字符串payload发送到服务器,然后从服务器返回相关的数据,并转换为指定编码的字符串,支持数据发送进度报告,服务器执行进度报告,接收数据进度报告操作
+ Synchronously read data from the MQTT server, send the specified encoded string payload to the server, + and then return the data from the server, and convert it to the specified encoded string, + support data transmission progress report, the server executes the progress report, and receives the data progress report +
+ 主题信息 + 负载数据 + 发送数据给服务器时的进度报告,第一个参数为已发送数据,第二个参数为总发送数据 + 服务器处理数据的进度报告,第一个参数Topic自定义,通常用来传送操作百分比,第二个参数自定义,通常用来表示服务器消息 + 从服务器接收数据的进度报告,第一个参数为已接收数据,第二个参数为总接收数据 + 服务器返回的数据信息 +
+ + + 读取MQTT服务器注册的RPC接口,忽略返回的Topic数据,直接将结果转换为泛型对象,如果JSON转换失败,将返回错误,参数传递主题和数据负载, + 数据负载示例:"{\"address\": \"100\",\"length\": 10}" 本质是一个字符串。
+ Read the RPC interface registered by the MQTT server, ignore the returned Topic data, and directly convert the result into a generic object. + If the JSON conversion fails, an error will be returned. The parameter passes the topic and the data payload. + The data payload example: "{\"address\ ": \"100\",\"length\": 10}" is essentially a string. +
+ + 关于类型对象,需要和服务器返回的类型一致,如果服务器返回了 , 这里也是 , 如果是自定义对象,客户端没有该类型,可以使用 + + 泛型对象,需要和返回的数据匹配,如果返回的是 int 数组,那么这里就是 int[],务必和服务器侧定义的返回类型一致 + 主题信息,也是服务器的 RPC 接口信息 + 传递的参数信息,示例:"{\"address\": \"100\",\"length\": 10}" 本质是一个字符串。 + 服务器返回的数据信息 +
+ + + 读取MQTT服务器注册的RPC接口,忽略返回的Topic数据,直接将结果转换为泛型对象,如果JSON转换失败,将返回错误,参数传递主题和数据负载, + 数据负载示例:new { address = "", length = 0 } 本质是一个匿名对象。
+ Read the RPC interface registered by the MQTT server, ignore the returned Topic data, and directly convert the result into a generic object. + If the JSON conversion fails, an error will be returned. The parameter passes the topic and the data payload. + The data payload example: new { address = "", length = 0 } is essentially an anonymous object. +
+ + 关于类型对象,需要和服务器返回的类型一致,如果服务器返回了 , 这里也是 , 如果是自定义对象,客户端没有该类型,可以使用 + + 泛型对象,需要和返回的数据匹配,如果返回的是 int 数组,那么这里就是 int[] + 主题信息,也是服务器的 RPC 接口信息 + 传递的参数信息,示例:new { address = "", length = 0 } 本质是一个匿名对象。 + 服务器返回的数据信息 +
+ + + 读取服务器的已经注册的API信息列表,将返回API的主题路径,注释信息,示例的传入的数据信息。
+ Read the registered API information list of the server, and return the API subject path, annotation information, and sample incoming data information. +
+ 包含是否成功的api信息的列表 +
+ + + 读取服务器的指定的API接口的每天的调用次数,如果API接口不存在,或是还没有调用数据,则返回失败。
+ Read the number of calls per day of the designated API interface of the server. + If the API interface does not exist or the data has not been called yet, it returns a failure. +
+ + 如果api的参数为空字符串,就是请求所有的接口的调用的统计信息。 + + 等待请求的API的接口信息,如果为空,就是请求所有的接口的调用的统计信息。 + 最近几日的连续的调用情况,例如[1,2,3],表示前提调用1次,昨天调用2次,今天3次 +
+ + + 读取服务器的已经驻留的所有消息的主题列表
+ Read the topic list of all messages that have resided on the server +
+ 消息列表对象 +
+ + + 读取服务器的已经驻留的指定主题的消息内容
+ Read the topic list of all messages that have resided on the server +
+ 指定的主题消息 + 结果进度报告 + 消息列表对象 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + 从远程服务器下载一个文件到本地,需要指定文件类别,文件名,进度报告,本地保存的文件名
+ To download a file from a remote server to the local, you need to specify the file category, file name, progress report, and file name saved locally +
+ 文件的类别,例如 Files/Personal/Admin 按照斜杠来区分 + 文件名称,例如 123.txt + 进度报告,第一个参数是已完成字节数,第二个参数是总字节数,如果不需要,传入NULL即可 + 本地保存的文件名 + 取消下载操作的令牌 + 是否下载成功 +
+ + + 从远程服务器下载一个文件到流中,需要指定文件类别,文件名,进度报告,本地保存的文件名
+ To download a file from a remote server to the stream, you need to specify the file category, file name, progress report, and file name saved locally +
+ 文件的类别,例如 Files/Personal/Admin 按照斜杠来区分 + 文件名称,例如 123.txt + 进度报告,第一个参数是已完成字节数,第二个参数是总字节数 + 数据流 + 取消下载操作的令牌 + 是否下载成功 +
+ + + 从远程服务器下载一个文件,生成一个Bitmap图片对象,需要指定文件类别,文件名,进度报告,可用于用户头像的存储
+ Download a file from a remote server and generate a Bitmap image object. You need to specify the file category, file name, and progress report, which can be used to store the user's avatar +
+ 文件的类别,例如 Files/Personal/Admin 按照斜杠来区分 + 文件名称,例如 123.txt + 进度报告,第一个参数是已完成字节数,第二个参数是总字节数 + 取消下载操作的令牌 + 如果下载成功,则携带图片资源对象 +
+ + + 上传一个Bitmap图片对象到服务器指定的分类下面,需要指定分类信息,服务器保存的文件名,描述信息,支持进度报告
+ Upload a Bitmap image object to the category specified by the server, you need to specify the category information, + the file name saved by the server, description information, and support for progress reports +
+ 图片对象 + 文件的类别,例如 Files/Personal/Admin 按照斜杠来区分 + 在服务器保存的文件名称 + 文件的额外的描述信息 + 进度报告,第一个参数是已完成字节数,第二个参数是总字节数 + 取消上传操作的令牌 + 是否上传成功 +
+ + + 上传文件给服务器,需要指定上传的数据内容,上传到服务器的分类信息,支持进度汇报功能。
+ To upload files to the server, you need to specify the content of the uploaded data, + the classification information uploaded to the server, and support the progress report function. +
+ 数据源,可以是文件名,也可以是数据流 + 在服务器保存的文件名,不包含驱动器路径 + 文件的类别,例如 Files/Personal/Admin 按照斜杠来区分 + 文件的额外的描述信息 + 进度报告,第一个参数是已完成字节数,第二个参数是总字节数 + 用户取消的令牌信息 + 是否成功的结果对象 +
+ + + 上传文件给服务器,需要指定上传文件的路径信息,服务器保存的名字,以及上传到服务器的分类信息,支持进度汇报功能。
+ To upload a file to the server, you need to specify the path information of the uploaded file, the name saved by the server, + and the classification information uploaded to the server to support the progress report function. +
+ 文件名,需要指定完整的路径信息,文件必须存在,否则发送失败 + 文件的类别,例如 Files/Personal/Admin 按照斜杠来区分 + 服务器端保存的文件名 + 文件的额外的描述信息 + 进度报告,第一个参数是已完成字节数,第二个参数是总字节数 + 取消上传操作的令牌 + 是否上传成功的结果对象 +
+ + + 上传文件给服务器,需要指定上传文件的路径信息(服务器保存的名称就是文件名),以及上传到服务器的分类信息,支持进度汇报功能。
+ To upload a file to the server, you need to specify the path information of the uploaded file (the name saved by the server is the file name), + as well as the classification information uploaded to the server, to support the progress report function. +
+ 文件名,需要指定完整的路径信息,文件必须存在,否则发送失败 + 文件的类别,例如 Files/Personal/Admin 按照斜杠来区分 + 文件的额外的描述信息 + 进度报告,第一个参数是已完成字节数,第二个参数是总字节数 + 取消上传操作的令牌 + 是否上传成功的结果对象 +
+ + + 上传流给服务器,需要指定流,服务器保存的名字,以及上传到服务器的分类信息,支持进度汇报功能。
+ To upload a stream to the server, you need to specify the stream, the name saved by the server, and the classification information uploaded to the server to support the progress reporting function. +
+ 流 + 文件的类别,例如 Files/Personal/Admin 按照斜杠来区分 + + 文件的额外的描述信息 + 进度报告,第一个参数是已完成字节数,第二个参数是总字节数 + 取消上传操作的令牌 + 是否上传成功的结果对象 +
+ + + 下载指定分类信息的所有的文件描述信息,需要指定分类信息,例如:Files/Personal/Admin
+ To download all the file description information of the specified classification information, + you need to specify the classification information, for example: Files/Personal/Admin +
+ 文件的类别,例如 Files/Personal/Admin 按照斜杠来区分 + 当前分类下所有的文件描述信息 +
+ + + 下载指定分类信息的全部子分类信息
+ Download all sub-category information of the specified category information +
+ 文件的类别,例如 Files/Personal/Admin 按照斜杠来区分 + 当前分类下所有的子分类信息 +
+ + + 请求服务器指定分类是否存在指定的文件名,需要指定分类信息,文件名
+ Request the server to specify whether the specified file name exists in the specified category, need to specify the category information, file name +
+ 文件的类别,例如 Files/Personal/Admin 按照斜杠来区分 + 文件名信息,例如 123.txt + Content为True表示存在,否则为不存在 +
+ + + 删除服务器的指定的文件名,需要指定分类信息,文件名
+ Delete the specified file name of the server, need to specify the classification information, file name +
+ 文件的类别,例如 Files/Personal/Admin 按照斜杠来区分 + 文件名信息 + 是否删除成功 +
+ + + + + + 删除服务器上指定的分类信息及管理的所有的文件,包含所有的子分类信息,不可逆操作,谨慎操作。
+ Delete the specified classification information and all files managed on the server, + including all sub-classification information, irreversible operation, and careful operation. +
+ 文件的类别,例如 Files/Personal/Admin 按照斜杠来区分 + 是否删除成功 +
+ + + 获取服务器文件夹的指定目录的文件统计信息,包括文件数量,总大小,最后更新时间
+ Get the file statistics of the specified directory of the server folder, including the number of files, the total size, and the last update time +
+ 文件的类别,例如 Files/Personal/Admin 按照斜杠来区分 + 服务器文件大小的结果对象,单位:字节数 +
+ + + 获取服务器文件夹的指定目录的所有子目录的文件信息,包括每个子目录的文件数量,总大小,最后更新时间
+ Get the file information of all subdirectories of the specified directory of the server folder, including the number of files in each subdirectory, the total size, and the last update time +
+ 文件的类别,例如 Files/Personal/Admin 按照斜杠来区分 + 是否让服务器携带最新的文件信息返回 + 服务器文件大小的结果对象,单位:字节数 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 获取或设置当前的连接信息,客户端将根据这个连接配置进行连接服务器,在连接之前需要设置相关的信息才有效。
+ To obtain or set the current connection information, the client will connect to the server according to this connection configuration. + Before connecting, the relevant information needs to be set to be effective. +
+
+ + + 获取或设置使用字符串访问的时候,使用的编码信息,默认为UT8编码
+ Get or set the encoding information used when accessing with a string, the default is UT8 encoding +
+
+ + + + + + [商业授权] MqttSyncClient客户端的连接池类对象,用于共享当前的连接池,合理的动态调整连接对象,然后进行高效通信的操作,默认连接数无限大。
+ [Authorization] The connection pool class object of the MqttSyncClient is used to share the current connection pool, + reasonably dynamically adjust the connection object, and then perform efficient communication operations, + The default number of connections is unlimited +
+ + 本连接池用于提供高并发的读写性能,仅对商业授权用户开放。使用起来和一致,但是更加的高性能,在密集型数据交互时,优势尤为明显。 + +
+ + + 通过MQTT连接参数实例化一个对象
+ Instantiate an object through MQTT connection parameters +
+ MQTT的连接参数信息 +
+ + + 通过MQTT连接参数以及自定义的初始化方法来实例化一个对象
+ Instantiate an object through MQTT connection parameters and custom initialization methods +
+ MQTT的连接参数信息 + 自定义的初始化方法 +
+ + + 获取当前的连接池管理对象信息
+ Get current connection pool management object information +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Mqtt的同步网络服务的单Api信息描述类
+ Single Api information description class of Mqtt's synchronous network service +
+
+ + + 当前的Api的路由信息,对于注册服务来说,是类名/方法名 + + + + + 当前的Api的路由说明 + + + + + 当前方法的签名 + + + + + 当前Api的调用次数 + + + + + 示例的 + + + + + 当前Api的调用总耗时,单位是秒 + + + + + 当前Api是否为方法,如果是方法,就为true,否则为false + + + + + 如果当前的API接口是支持Http的请求方式,当前属性有效,例如GET,POST + + + + + 当前的Api的方法是否是异步的Task类型 + + + + + 当前的Api关联的方法反射,本属性在JSON中将会忽略 + + + + + 当前的Api关联的方法反射,本属性在JSON中将会忽略 + + + + + 当前Api的方法的权限访问反射,本属性在JSON中将会忽略 + + + + + 当前Api绑定的对象的,实际的接口请求,将会从对象进行调用,本属性在JSON中将会忽略 + + + + + 使用原子的操作增加一次调用次数的数据信息,需要传入当前的消耗的时间,单位为100倍毫秒 + + 当前调用花费的时间,单位为100倍毫秒 + + + + + + + 一个工业物联网的底层架构框架,专注于底层的技术通信及跨平台,跨语言通信功能,实现各种主流的PLC数据读写,实现modbus,机器人的各种协议读写等等, + 支持快速搭建工业上位机软件,组态软件,SCADA软件,工厂MES系统,助力企业工业4.0腾飞,实现智能制造,智慧工厂的目标。 +

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

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

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

+ 先整体介绍下如何使用本组件库的基本思路,基本上是引用库,从nuget安装的库会自动添加引用到项目中的,就可以直接进行using操作了,当然了在使用之前,需要先激活一下,激活的方式如下: + + 在你的应用程序刚开起来的时候,激活一次即可,后续都不需要再重复激活了。接下来就可以开始写代码了。任何的设备的操作基本是相同的,实例化,配置参数(有些plc默认的参数即可),连接设备,读写操作,关闭 +
+ 关于Hsl的日志功能,贯穿整个hslcommunication的项目,所有的网络类,都包含了日志功能,当然你也可以继承接口实现你自己的日志,在hsl里提供了三种常见的简单实用的日志 + + +
+ 再开始讲解基本的代码通讯之前,先来了解两个基本的概念,长连接,短连接。为了更好的说明当前的通信情况,我把所有的通信拆分为四个部分,连接,发,收,断开。
+ 短连接:连接,发,收,断开,连接,发,收,断开,连接,发,收,断开,连接,发,收,断开...无限循环
+ 长连接:连接,发,收,发,收,发,收,发,收,发,收,发,收,发,收,发,收,发,收....断开
+ 然后我们来看看异常的情况,短连接的异常比较好处理,反正每次请求都是先连接,关键来看长连接的异常
+ 长连接:连接,发,收,发,收...异常,连接,发,收,发,收,异常,连接,连接,连接...收,发,收,发,收,发,收,发,收....断开
+ 这里第一个异常发生后,第二次读写立即连接上去并且成功,第二个异常触发后,一直读写失败,说明就是一直连接不上去。
+ 对于HSL组件来说,不需要重复连接服务器或是plc,无论是短连接还是长连接,都只需要一直读写就OK了,对读写的结果进行判定,即使发生异常了,读写失败了,也要一直坚持,网络好的时候,读写会恢复成功的。

+ 我们以三菱的PLC为示例,其他的plc调用方式基本是一模一样的,就是调用的类不一样,参数配置不一样而已。以下的逻辑都是适用的。 + + + + + 需要注意的事,在实际的开发中,我们的一个窗体程序(或是控制台,原理都是一样的),会定时或是不定时的去读写PLC的操作(调用Read或是Write方法),这个本身是没有任何问题的, + 但是总会有这样的需求,我们需要在界面上,或是系统里实时体现当前的PLC的在线情况,我相信不少小伙伴会有这样的问题的。所以就出现了下面的代码: + + 实际这种操作是非常不可取的,为什么这么说,下面说说原因:
+ + 首先说明下方法里发生了什么?这个方法首先会关闭连接,然后重新连接,连接成功,就发送初始化指令(有些PLC就需要握手确认),初始化握手成功,才返回真正的成功!
+ 那么这里为什么不行呢?因为Read和Write方法是有混合锁实现互斥操作的,这样的好处就是多线程调用互不影响,但是方法,并没有互斥锁,如果调用的时候同时在读写,那就会导致异常, + 那么为什么没有加互斥锁呢?因为为了实现读写方法的时候,支持自动重连操作,所以连接方法已经在互斥锁了。如果再加互斥锁,会发生死锁,所以综合考虑,就设计成了现在的样子。 +
+ 既然上面的代码不能使用,那么怎么来看当前的连接状态呢?这里有一点需要注意,只需要调用0次或1次即可。 + + 如果你本来就在每秒读取PLC的数据信息了,那么连检测的定时器都不用写了,你每次读取数据的时候顺便判定下,结果就出来了。

+ 其他相关的代码示例需要到各自的目录里查找,下面只列举了一些常见的代码示例 + + Hsl组件日志相关示例参考 + 三菱mc协议示例参考 + 西门子S7协议示例参考 + 欧姆龙协议示例参考 + 罗克韦尔协议示例参考 + Modbus协议示例参考 + MQTT服务器示例参考 + MQTT客户端示例参考 + WebSocket服务器示例参考 + WebSocket客户端示例参考 + WebApi示例参考 + Redis示例参考 + 身份证阅读器串口版 + 身份证阅读器网口版 + 文件传送服务器 + + + 相关的代码示例,可以翻阅左侧的命名空间,基本是按照功能来区分的,只要点进去多看看即可 + +
+ + 本软件著作权归Richard.Hu所有。 +
+ 博客地址:https://www.cnblogs.com/dathlin/p/7703805.html +
+ 授权付费模式:Hslcommunication企业商业授权,一次付费,终身授权,终身开放源码,终身支持后续更新,支持的设备列表请参考最新的DEMO界面,凡是DEMO列举都是统一打包授权的。不限制电脑,项目,plc,开发人员数量。 +
+ + 企业授权提供专业版通讯库的所有更新版的 HslCommunication 源代码。包含 .Net Java Python 三大平台。 + 企业授权支持对特殊需求而进行修改,更新源代码的服务,配合企业客户修复源代码错误的服务。 + 企业授权用户拥有对通讯库商用的权利,拥有自己修改源代码并商业使用的权利,组件版权仍归属原作者。 + 企业授权用户需要对源代码保密。禁止公开源代码,禁止对源代码的商业用途。 + 企业授权用户可以免费获得官网的 MES DEMO源代码。 + 企业商业授权 费用请联系QQ200962190咨询,公司即可拥有商用版权,支持任意的开发人员数量,项目数量,支持源代码更新,长期支持,商用软件必须冠名公司标识,官网显示合作伙伴logo。 + 支持专业的一对一培训业务,一小时1000 rmb,一天8小时为5000 rmb + + + 个人赞助二维码:
+ +
+ + + + 正式发布库到互联网上去。 + + + + + 添加xml文档 + + + + + 重新设计西门子的数据读取机制,提供一个更改类型的方法。 + + + + + 提供一个ModBus的服务端引擎。 + + + + + 紧急修复了西门子批量访问时出现的BUG。 + + + + + 完善CRC16校验码功能,完善数据库辅助类方法。 + + + + + 西门子访问类,提供一个批量bool数据写入,但该写入存在安全隐患,具体见博客。 + + + + + 与3.X版本不兼容,谨慎升级。如果要升级,主要涉及的代码包含PLC的数据访问和同步数据通信。 + 删除了2个类,OperateResultBytes和OperateResultString类,提供了更加强大方便的泛型继承类,多达10个泛型参数。地址见http://www.cnblogs.com/dathlin/p/7865682.html + 将部分类从HslCommunication命名空间下移动到HslCommunication.Core下面。 + 提供了一个通用的ModBus TCP的客户端类,方便和服务器交互。 + 完善了HslCommunication.BasicFramework.SoftBaisc下面的辅助用的静态方法,提供了一些方便的数据转化,在上面进行公开。 + + + + + 更新了三菱的读取接口,提供了一个额外的字符串表示的方式,OperateResult<byte[]> read = melsecNet.ReadFromPLC("M100", 5); + 更新了西门子的数据访问类和modbus tcp类提供双模式运行,按照之前版本的写法是默认模式,每次请求重新创建网络连接,新增模式二,在代码里先进行连接服务器方法,自动切换到模式二,每次请求都共用一个网络连接,内部已经同步处理,加速数据访问,如果访问失败,自动在下次请求是重新连接,如果调用关闭连接服务器,自动切换到模式一。 + + + + + 修复Modbus tcp批量写入寄存器时,数据解析异常的BUG。 + 三菱访问器新增长连接模式。 + 三菱访问器支持单个M写入,在数组中指定一个就行。 + 三菱访问器提供了float[]数组写入的API。 + 三菱访问器支持F报警器,B链接继电器,S步进继电器,V边沿继电器,R文件寄存器读写,不过还需要大面积测试。 + 三菱访问器的读写地址支持字符串形式传入。 + 其他的细节优化。 + 感谢 hwdq0012 网友的测试和建议。 + 感谢 吃饱睡好 好朋友的测试 + + + + + 三菱,西门子,Modbus tcp客户端内核优化重构。 + 三菱,西门子,Modbus tcp客户端提供统一的报文测试方法,该方法也是通信核心,所有API都是基于此扩展起来的。 + 三菱,西门子,Modbus tcp客户端提供了一些便捷的读写API,详细参见对应博客。 + 三菱的地址区分十进制和十六进制。 + 优化三菱的位读写操作。 + + + + + 修复西门子读取的地址偏大会出现异常的BUG。 + 完善统一了所有三菱,西门子,modbus客户端类的读写方法,已经更新到博客。 + + + + + 完善日志记录,提供关键字记录操作。 + 三菱,西门子,modbus tcp客户端提供自定义数据读写。 + modbus tcp服务端提供数据池功能,并支持数据订阅操作。 + 提供一个纵向的进度控件。 + + + + + 完善Modbus tcp服务器端的数据订阅功能。 + 进度条控件支持水平方向和垂直方向两个模式。 + + + + + 进度条控件修复初始颜色为空的BUG。 + 进度条控件文本锯齿修复。 + 按钮控件无法使用灰色按钮精灵破解。 + + + + + modbus tcp提供读取short数组的和ushort数组方法。 + + + + + 修复流水号生成器无法生成不带日期格式的流水号BUG。 + + + + + OperateResult成功时,消息为成功。 + 数据库辅助类API添加,方便的读取聚合函数。 + 日志类分析工具界面,显示文本微调。 + + + + + 进度条控件新增一个新的属性对象,是否使用动画。 + + + + + 新增一个饼图控件。 + + + + + 饼图显示优化,新增是否显示百分比的选择。 + + + + + 新增一个仪表盘控件。 + + + + + 饼图控件新增一个是否显示占比很小的信息文本。 + 新增一个旋转开关控件。 + 新增一个信号灯控件。 + + + + + 修复modbus tcp客户端读取 float, int, long,的BUG。 + + + + + 修复modbus tcp客户端读取某些特殊设备会读取不到数据的BUG。 + + + + + 双模式的网络基类中新增一个读取超时的时间设置,如果为负数,那么就不验证返回。 + + + + + 信号灯控件显示优化。 + Modbus Tcp服务端类修复内存暴涨问题。 + winfrom客户端提供一个曲线控件,方便显示实时数据,多曲线数据。 + + + + + 优化modbus tcp客户端的访问类,支持服务器返回错误信息。 + 优化曲线控件,支持横轴文本显示,支持辅助线标记,详细见对应博客。 + + + + + 曲线控件最新时间显示BUG修复。 + Modbus tcp错误码BUG修复。 + 三菱访问类完善long类型读写。 + 西门子访问类支持1500系列,支持读取订货号。 + + + + + 曲线控件增加一个新的属性,图标标题。 + Modbus tcp服务器端的读写BUG修复。 + 西门子访问类重新支持200smart。 + + + + + Json组件更新至11.0.1版本。 + 紧急修复日志类的BeforeSaveToFile事件在特殊情况的触发BUG。 + + + + + 修复Modbus-tcp服务器接收异常的BUG。 + 修复SoftBasic.ByteTo[U]ShortArray两个方法异常。 + + + + + 网络核心层重新开发,完全的基于异步IO实现。 + 所有双模式客户端类进行代码重构,接口统一。 + 完善并扩充OperateResult对象的类型支持。 + 提炼一些基础的更加通用的接口方法,在SoftBasic里面。 + 支持欧姆龙PLC的数据交互。 + 支持三菱的1E帧数据格式。 + 不兼容升级,谨慎操作。 + + + + + OperateResult静态方法扩充。 + 文件引擎提升缓存空间到100K,加速文件传输。 + 三菱添加读取单个bool数据。 + Modbus-tcp客户端支持配置起始地址不是0的服务器。 + 其他代码优化。 + + + + + ComplexNet服务器代码精简优化,移除客户端的在线信息维护代码。 + 西门子访问类第一次握手信号18字节改为0x02。 + 更新JSON组件到11.0.2版本。 + 日志存储类优化,支持过滤存储特殊关键字的日志。 + Demo项目新增控件介绍信息。 + + + + + 修复Modbus-Tcp服务器的空异常。 + 修复西门子类写入float,double,long数据异常。 + 修复modbus-tcp客户端读写字符串颠倒异常。 + 修复三菱多读取数据字节的问题。 + 双模式客户端新增异形客户端模式,变成了三模式客户端。 + 提供异形modbus服务器和客户端Demo方便测试。 + + + + + Modbus-tcp服务器同时支持RTU数据交互。 + 异形客户端新增在线监测,自动剔除访问异常设备。 + modbus-tcp支持读取输入点。 + 所有客户端设备的连接超时判断增加休眠,降低CPU负载。 + 西门子批量读取上限为19个数组。 + 其他小幅度的代码优化。 + + + + + Modbus相关的代码优化。 + 新增Modbus-Rtu客户端模式,配合服务器的串口支持,已经可以实现电脑本机的通讯测试了。 + + + + + 提炼数据转换基类,优化代码,修复WordReverse类对字符串的BUG,相当于修复modbus和omron读写字符串的异常。 + 新增一个全新的功能类,数据的推送类,轻量级的高效的订阅发布数据信息。具体参照Demo。 + + + + + Modbus服务器提供在线客户端数量属性。 + 所有服务器基类添加端口缓存。 + 双模式客户端完善连接失败,请求超时的消息提示。 + 修复双模式客户端某些特殊情况下的头子节NULL异常。 + 修复三菱交互类的ASCII协议下的写入数据异常。 + + + + + 新增一个埃夫特机器人的数据访问类。 + 双模式客户端的长连接支持延迟连接操作,通过一个新方法完成。 + + + + + 优化ComplexNet客户端的代码。 + 更新埃夫特机器人的读取机制到最新版。 + Modbus Rtu及串口基类支持接收超时时间设置,不会一直卡死。 + Modbus Tcp及Rtu都支持带功能码输入,比如读取100地址,等同于03X100。(注意:该多功能地址仅仅适用于Read及相关的方法 + + + + + Modbus Tcp及Rtu支持手动更改站号。也就是支持动态站号调整。 + 修复上个版本遗留的Modbus在地址偏移情况下会多减1的BUG。 + + + + + Modbus服务器支持串口发送数据时也会触发消息接收。 + IReadWriteNet接口新增Read(string address,ushort length)方法。 + 提炼统一的设备基类,支持Read方法及其扩展的子方法。 + 修复埃夫特机器人的读取BUG。 + 三菱PLC支持读取定时器,计数器的值,地址格式为"T100","C100"。 + 新增快速离散的傅立叶频谱变换算法,并在Demo中测试三种周期信号。 + + + + + 修复西门子fetch/write协议对db块,定时器,计数器读写的BUG。 + 埃夫特机器人修复tostring()的方法。 + modbus客户端新增两个属性,指示是否字节颠倒和字符串颠倒,根据不同的服务器配置。 + IReadWriteNet接口补充几个数组读取的方法。 + 新增一个全新的连接池功能类,详细请参见 https://www.cnblogs.com/dathlin/p/9191211.html + 其他的小bug修复,细节优化。 + + + + + IByteTransform接口新增bool[]数组转换的2个方法。 + Modbus Server类新增离散输入数据池和输入寄存器数据池,可以在服务器端读写,在客户端读。 + Modbus Tcp及Modbus Rtu及java的modbus tcp支持富地址表示,比如"s=2;100"为站号2的地址100信息。 + Modbus Server修复一个偶尔出现多次异常下线的BUG。 + 其他注释修正。 + + + + + Modbus服务器新增数据大小端配置。 + Modbus服务器支持数据存储本地及从本地加载。 + 修复modbus服务器边界读写bug。 + ByteTransformBase的double转换bug修复。 + 修复ReverseWordTransform批量字节转换时隐藏的一些bug。 + SoftBasic移除2个数据转换的方法。 + 修复modbus写入单个寄存器的高地位倒置的bug。 + 修复串口通信过程中字节接收不完整的异常。包含modbus服务器和modbus-rtu。 + 添加了.net 4.5项目,并且其他项目源代码引用该项目。添加了单元测试,逐步新增测试方法。 + + + + + 项目新增api文档,提供离线版和在线版,文档提供了一些示例代码。 + modbus-rtu新增批量的数组读取方法。 + modbus-rtu公开ByteTransform属性,方便的进行数据转换。 + SoftMail删除发送失败10次不能继续发送的机制。 + modbus server新增站号属性,站号不对的话,不响应rtu反馈。 + modbus server修复读取65524和65535地址提示越界的bug。 + Demo项目提供了tcp/ip的调试工具。 + + + + + API文档中西门子FW协议示例代码修复。 + modbus-rtu修复读取线圈和输入线圈的值错误的bug。 + + + + + Demo中三菱A-1E帧,修复bool读取显示失败的BUG。 + 数据订阅类客户端连接上服务器后,服务器立即推送一次。 + 串口设备基类代码提炼,提供了多种数据类型的读写支持。 + 仪表盘新增属性IsBigSemiCircle,设置为true之后,仪表盘可显示大于半圆的视图。 + 提供了一个新的三菱串口类,用于采集FX系列的PLC,MelsecFxSerial + + + + + 修复双模式基类的一个bug,支持不接受反馈数据。 + 修复三菱串口类的读写bug,包括写入位,和读取字和位。 + 相关代码重构优化。 + + + + + 串口基类接收数据优化,保证接收一次完整的数据内容。 + 新增一个容器罐子的控件,可以调整背景颜色。 + 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类,该类库还未仔细测试。 + 埃夫特机器人更新,适配最新版本数据采集。 + 其他的代码优化,重构精简 + + + + + 修复埃夫特机器人读取数据的bug,已测试通过。 + ByteTransform数据转换层新增一个DataFormat属性,可选ABCD,BADC,CDAB,DCBA + 三个modbus协议均适配了ByteTransform并提供了直接修改的属性,默认ABCD + 注意:如果您的旧项目使用的Modbus类,请务必重新测试适配。给你带来的不便,敬请谅解。 + + + + + 所有显示字符串支持中英文,支持切换,默认为系统语言。 + Json组件依赖设置为不依赖指定版本。 + modbus-ascii类库测试通过。 + 新增松下的plc串口读写类,还未测试。 + 西门子s7类写入byte数组长度不受限制,原先大概250个字节左右。 + demo界面进行了部分的中英文适配。 + OperateResult类新增了一些额外的构造方法。 + SoftBasic新增了几个字节数组操作相关的通用方法。 + 其他大量的细节的代码优化,重构。 + + + + + DeviceNet层添加异步的API,支持async+await调用。 + java修复西门子的写入成功却提示失败的bug。 + java代码重构,和C#基本保持一致。 + python版本发布,支持三菱,西门子,欧姆龙,modbus,数据订阅,同步访问。 + 其他的代码优化,重构精简。 + + + + + python和java的代码优化,完善,添加三菱A-1E类。 + 修复仪表盘控件,最大值小于0会产生的特殊Bug。 + NetSimplifyClient: 提供高级.net的异步版本方法。 + serialBase: 新增初始化和结束的保护方法,允许重写实现额外的操作。 + softBuffer: 添加一个线程安全的buffer内存读写。 + 添加西门子ppi协议类,针对s7-200,需要最终测试。 + Panasonic: 修复松下plc的读取读取数据异常。 + 修复fx协议批量读取bool时意外的Bug。 + NetSimplifyClient: 新增带用户int数据返回的读取接口。 + + + + + 新增一个温度采集模块的类,基于modbus-rtu实现,阿尔泰科技发展有限公司的DAM3601模块。 + + + + + 三菱的mc协议新增支持读取ZR文件寄存器功能。 + + + + + 修复AB PLC的bool和byte写入失败的bug,感谢 北京-XLang 提供的思路。 + + + + + 新增西门子PPI通讯类库,支持200,200smart等串口通信,感谢 合肥-加劲 和 江阴- ∮溪风-⊙_⌒ 的测试 + + + + + 新增三菱计算机链接协议通讯库,支持485组网,有效距离达50米,感谢珠海-刀客的测试。 + 串口协议的基类提供了检测当前串口是否处于打开的方法接口。 + 西门子S7协议新增槽号为3的s7-400的PLC选项,等待测试。 + + + + + 西门子PPI写入bool方法名重载到了Write方法里。 + 松下写入bool方法名重载到了Write方法里。 + 修复CRC16验证码在某些特殊情况下的溢出bug。 + 西门子类添加槽号和机架号属性,只针对400PLC有效,初步测试可读写。 + ab plc支持对数组的读写操作,支持数组长度为0-246,超过246即失败。 + 三菱的编程口协议修复某些特殊情况读取失败,却提示成功的bug。 + 串口基类提高缓存空间到4096,并在数据交互时捕获COM口的异常。 + + + + + 修复欧姆龙的数据格式错误,修改为CDAB。 + 新增一个瓶子的控件。 + 新增一个管道的控件。 + 初步新增一个redis的类,初步实现了读写关键字。 + + + + + AB PLC读取数组过长时提示错误信息。 + 正式发布redis客户端,支持一些常用的操作,并提供一个浏览器。博客:https://www.cnblogs.com/dathlin/p/9998013.html + + + + + 曲线控件的曲线支持隐藏其中的一条或是多条曲线,可以用来实现手动选择显示曲线的功能。 + Redis功能块代码优化,支持通知服务器进行数据快照保存,包括同步异步。 + Redis新增订阅客户端类,可以实现订阅一个或是多个频道数据。 + + + + + 串口数据接收的底层机制重新设计。 + 串口底层循环验证缓冲区是否有数据的间隔可更改,默认20ms。 + 串口底层新增一个清除缓冲区数据的方法。 + 串口底层新增一个属性,用于配置是否在每次读写前清除缓冲区的脏数据。 + 新增了一个SharpList类,用于超高性能的管理固定长度的数组。博客:https://www.cnblogs.com/dathlin/p/10042801.html + + + + + Networkbase: 接收方法的一个多余对象删除。 + 修复UserDrum控件的默认的text生成,及复制问题。 + UserDrum修复属性在设计界面没有注释的bug。 + + + + + 修复Demo程序在某些特殊情况下无法在线更新的bug。 + 修复曲线控件隐藏曲线时在某些特殊情况的不隐藏的bug。 + modbus协议无论读写都支持富地址格式。 + 修复连接池清理资源的一个bug,感谢 泉州-邱蕃金 + 修复java的modbus代码读取线圈异常的操作。 + Demo程序新增免责条款。 + + + + + 修复redis客户端对键值进行自增自减指令操作时的类型错误bug。 + 修复redis客户端对哈希值进行自增自减指令操作时的类型错误bug。 + 推送的客户端可选委托或是事件的方式,方便labview调用。 + 推送的客户端修复当服务器的关键字不存在时连接未关闭的Bug。 + Demo程序里,欧姆龙测试界面新增数据格式功能。 + + + + + ByteTransfer数据转换类新增了一个重载的构造方法。 + Redis客户提供了一个写键值并发布订阅的方法。 + AB-PLC支持槽号选择,默认为0。 + PushNet推送服务器新增一个配置,可用于设置是否在客户端刚上线的时候推送缓存数据。 + PushNet推送服务器对客户端的上下限管理的小bug修复。 + 本版本开始,组件将使用强签名。 + 本版本开始,组件的控件库将不再维护更新,所有的控件在新的控件库重新实现和功能增强,VIP群将免费使用控件库。 + VIP群的进入资格调整为赞助200Rmb,谢谢支持。 + + + + + 修复modbus服务器地址写入的bug,之前写入地址数据后无效,必须带x=3;100才可以。 + 修复极少数情况内核对象申请失败的bug,之前会引发资源耗尽的bug。 + SoftBasic的ByteToBoolArray新增一个转换所有位的重载方法,不需要再传递位数。 + 埃夫特机器人新增旧版的访问类对象,达到兼容的目的。 + Demo程序新增作者简介。 + 修复Demo程序的redis订阅界面在设置密码下无效的bug。 + Demo程序的免责界面新增demo在全球的使用情况。 + VIP群将免费使用全新的控件库,谢谢支持。地址:https://github.com/dathlin/HslControlsDemo + + + + + 修复modbus服务器地址读取的bug,之前读取地址数据后无效,必须带x=3;100才可以。 + NetPush功能里,当客户端订阅关键字时,服务器即使没有该关键字,也成功。 + 三菱的通讯类支持所有的字读取。例如读取M100的short数据表示M100-M115。 + VIP群将免费使用全新的控件库,谢谢支持。地址:https://github.com/dathlin/HslControlsDemo + + + + + 修复三菱A-1E协议的读取数据的BUG错误,给大家造成的不便,非常抱歉。 + VIP群将免费使用全新的控件库,谢谢支持。地址:https://github.com/dathlin/HslControlsDemo + + + + + 欧姆龙读写机制更改,报警的异常不再视为失败,仍然可以解析数据。 + Modbus地址优化,Modbus服务器的地址读写优化。 + 新增一个数据池类,SoftBuffer,主要用来缓存字节数组内存的,支持BCL数据类型读写。 + Modbus服务器的数据池更新,使用了最新的数据池类SoftBuffer。 + SoftBasic类新增一个GetEnumFromString方法,支持从字符串直接生成枚举值,已通过单元测试。 + 新增一个机器人的读取接口信息IRobotNet,统一化所有的机器人的数据读取。 + Demo程序中增加modbus的服务器功能。 + VIP群将免费使用全新的控件库,谢谢支持。地址:https://github.com/dathlin/HslControlsDemo + + + + + 日志存储的线程号格式化改为D3,也即三位有效数字。 + 日志存储事件BeforeSaveToFile里允许设置日志Cancel属性,强制当前的记录不存储。 + JSON库更新到12.0.1版本。 + SoftBasic新增一个GetTimeSpanDescription方法,用来将时间差转换成文本的方法。 + 调整日志分析控件不随字体变化而变化。 + 其他的代码精简优化。 + VIP群将免费使用全新的控件库,谢谢支持。地址:https://github.com/dathlin/HslControlsDemo + + + + + SoftBasic修复AddArrayData方法批量添加数据异常的bug,导致曲线控件显示异常。 + 提炼一个公共的欧姆龙辅助类,准备为串口协议做基础的通用支持。 + RedisHelper类代码优化精简,提炼部分的公共逻辑到NetSupport。 + SoftBuffer: 新增读写单个的位操作,通过位的与或非来实现。 + SiemensS7Server:新增一个s7协议的服务器,可以模拟PLC,进行通讯测试或是虚拟开发。 + 其他的代码精简优化。 + VIP群将免费使用全新的控件库,谢谢支持。地址:https://github.com/dathlin/HslControlsDemo + + + + + 西门子虚拟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 + + + + + 修复代码注释上的一些bug,三菱的注释修复。 + 调整三菱和基恩士D区数据和W区数据的地址范围,原来只支持到65535。 + SoftIncrementCount: 修复不持久化的序号自增类的数据复原的bug,并添加totring方法。 + IRobot接口更改。针对埃夫特机器人进行重新实现。 + RedisClient: 修复redis类在带有密码的情况下锁死的bug。 + 初步添加Kuka机器人的通讯类,等待测试。 + 西门子的s7协议读写字符串重新实现,根据西门子的底层存储规则来操作。 + Demo的绝大多的界面进行重构。更友好的支持英文版的显示风格。 + 如果有公司使用了本库并愿意公开logo的,将在官网及git上进行统一显示,有意愿的联系作者。 + + + + + 修复西门子s7协议读写200smart字符串的bug。 + 重构优化NetworkBase及NetwordDoubleBase网络类的代码。 + 新增欧姆龙的FinsUdp的实现,DA1【PLC节点号】在配置Ip地址的时候自动赋值,不需要额外配置。 + FinsTcp类的DA1【PLC节点号】在配置Ip地址的时候自动赋值,不需要额外配置。 + + + + + NetPushServer推送服务器修复某些情况下的推送卡死的bug。 + SoftBuffer内存数据类修复Double转换时出现的错误bug。 + 修复Kuka机器人读写数据错误的bug,已通过测试。 + 修复三菱的MelsecMcAsciiNet类写入bool值及数组会导致异常的bug,已通过单元测试。 + SoftBasic新增从字符串计算MD5码的方法。 + + + + + 修复java的NetPushClient掉线重复连接的bug。 + 发布java的全新测试Demo。 + Kuka机器人Demo修改帮助链接。 + 西门子新增s200的以太网模块连接对象。 + 修复文件引擎在上传文件时意外失败,服务器仍然识别为成功的bug。 + + + + + 修复日志存储自身异常时,时间没有初始化的bug。 + NetworkBase: 新增UseSynchronousNet属性,默认为true,通过同步的网络进行读写数据,异步手动设置为false。 + 修复西门子的读写字符串的bug。 + 添加KeyenceNanoSerial以支持基恩士Nano系列串口通信。 + 其他的代码优化。 + 发布一个基于xamarin的安卓测试demo。 + 发布官方论坛: http://bbs.hslcommunication.cn/ + + + + + 修复基恩士MC协议读取D区数据索引不能大于100000的bug。 + 修复基恩士串口协议读写bool数据的异常bug。 + 修复数据推送服务器在客户端异常断开时的奔溃bug,界面卡死bug。 + SoftNumericalOrder类新增数据重置和,最大数限制 。 + ModbusTcp客户端公开属性SoftIncrementCount,可以强制消息号不变,或是最大值。 + NetworkBase: 异步的方法针对Net451及standard版本重写。 + modbus服务器的方法ReadFromModbusCore( byte[] modbusCore )设置为虚方法,可以继承重写,实现自定义返回。 + 串口基类serialbase的初始化方法新增多个重载方法,方便VB和labview调用。 + NetworkBase: 默认的机制任然使用异步实现,UseSynchronousNet=false。 + 发布官方论坛: http://bbs.hslcommunication.cn/ + + + + + 紧急修复在NET451和Core里的异步读取的bug。 + 紧急修复PushNetServer的发送回调bug。 + 发布官方论坛: http://bbs.hslcommunication.cn/ + + + + + SoftBuffer缓存类支持bool数据的读写,bool数组的读写,并修复double读写的bug。 + Modbus虚拟服务器代码重构实现,继承自NetworkDataServerBase类。 + 新增韩国品牌LS的Fast Enet协议 + 新增韩国品牌LS的Cnet协议 + 新增三菱mc协议的虚拟服务器,仅支持二进制格式的机制。 + LogNet支持写入任意的字符串格式。 + 其他的注释添加及代码优化。 + 发布官方论坛: http://bbs.hslcommunication.cn/ + + + + + 修复三菱读写PLC位时的bug。 + 修复Modbus读写线圈及离散的变量bug。 + 强烈建议更新,不能使用6.2.0版本!或是回退更低的版本。 + 有问题先上论坛: http://bbs.hslcommunication.cn/ + + + + + 修复上个版本modbus的致命bug,已通过单元测试。 + 新增松下的mc协议,demo已经新增,等待测试。 + github源代码里的支持的型号需要大家一起完善。 + + + + + Ls的Fast Enet协议问题修复,感谢来自埃及朋友。 + Ls的CEnet协议问题修复,感谢来自埃及朋友。 + Ls新增虚拟的PLC服务器,感谢来自埃及朋友。 + 改进了机器码获取的方法,获取实际的硬盘串号。 + 日志的等级为None的情况,不再格式化字符串,原生写入日志。 + IReadWriteNet接口测试西门子的写入,没有问题。 + 三菱及松下,基恩士的地址都调整为最大20亿长度,实际取决于PLC本身。 + 松下MC协议修复LD数据库的读写bug。 + Redis的DEMO界面新增删除key功能。 + + + + + Redis新增读取服务器的时间接口,可用于客户端的时间同步。 + + + + + 西门子的SiemensS7Net类当读取PLC配置长度的DB块数据时,将提示错误信息。 + + + + + 新增安川机器人通信类,未测试。 + 西门子的多地址读取的长度不再限制为19个,而是无限制个。 + NetworkDoubleBase: 实现IDispose接口,方便手动释放资源。 + SerialBase: 实现IDispose接口,方便手动释放资源。 + NetSimplifyClient:新增一个async...await方法。 + NetSimplifyClient:新增读取字符串数组。 + ModbusServer:新增支持账户密码登录,用于构建安全的服务器,仅支持hsl组件的modbus安全访问。 + NetSimplifyServer:新增支持账户密码登录。 + 新增永宏PLC的编程口协议。 + 新增富士PLC的串口通信,未测试。 + 新增欧姆龙PLC的CIP协议通讯。 + 初步添加OpenProtocol协议,还未完成,为测试。 + MelsecMcNet:字单位的批量读取长度突破960长度的限制,支持读取任意长度。 + MelsecMcAsciiNet:字单位的批量读取长度突破480长度的限制,支持读取任意长度。 + AllenBradleyNet:读取地址优化,支持读取数组任意起始位置,任意长度,支持结构体嵌套读取。 + 其他大量的代码细节优化。 + + + + + IReadWriteNet完善几个忘记添加的Write不同类型参数的重载方法。 + IReadWriteNet新增ReadBool方法,Write(string address, bool value)方法,是否支持操作需要看plc是否支持,不支持返回操作不支持的错误。 + OmronFinsNet:新增一个属性,IsChangeSA1AfterReadFailed,当设置为True时,通信失败后,就会自动修改SA1的值,这样就能快速链接上PLC了。 + OmronFinsNet:新增读写E区的能力,地址示例E0.0,EF.100,E12.200。 + 新增HslDeviceAddress特性类,现在支持直接基于对象的读写操作,提供了一种更加便捷的读写数据的机制,详细的关注后续的论坛。 + 本组件的最后一个对个人免费的版本,企业使用一律需要授权,授权流程为签合同,付款,开票。 + + + + + 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串口协议的通讯类。 + FatekProgramOverTcp: 新增基于网口透传的永宏plc的串口协议的通讯类。 + 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群发放激活码,仅支持个人用途使用,禁止破解,感谢对正版的支持。 + 今天是2019年9月10日,祝天下所有的教师节日快乐。 + + + + + 所有网口透传类对象完善实例化的方法,都新增一个指定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 。 + + + + + ABBWebClient: abb机器人的api读取日志的接口新增一个参数,读取最近的日志数量。默认为10条。 + MQTTClient: 修复mqtt客户端类的消息重复bug,修复发送空订阅的bug。 + SiemensS7Net: 西门子的s7协议的类新增一个api,支持时间的读写,支持异步,时间格式和s7net一致。 + 本组件从v8.0.0开始进入付费授权模式,详细参考官方:http://www.hslcommunication.cn 。 + + + + + Networkbase: 修复套接字网络授权失败时不关闭网络的bug。 + SoftBasic: 新增一个数组数据格式化的方法信息。 + MqttServer: 新增一个mqtt的服务器,初步支持订阅,发布订阅,强制发布订阅,在线客户端数量功能等等。 + Demo: 所有的PLC的demo和modbus协议的demo,支持批量读取各种类型的数组数据。 + Nuget: 新增本项目的图标,在nuget上搜索时会显示图标。 + 本组件从v8.0.0开始进入付费授权模式,详细参考官方:http://www.hslcommunication.cn 。 + + + + + ModbusUdp: 新增一个Modbus的基于udp的协议类,使用的tcp的报文的机制。 + HttpServer: 新增一个http的服务器封装类,方便实现基于webapi的后台功能,集成GET,POST的接口操作。 + Serial Ports: standard项目依赖官方串口库,实现所有的设备的串口支持,可应用于跨平台。 + standard: 在nuget上提供.net standard2.1版本的库。 + 本组件从v8.0.0开始进入付费授权模式,详细参考官方:http://www.hslcommunication.cn 。 + + + + + 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版本,开放串口。 + 本组件从v8.0.0开始进入付费授权模式,详细参考官方:http://www.hslcommunication.cn 。 + + + + + Lsis: 感谢埃及朋友的支持,demo增加了bool操作。 + Knx驱动:增加测试demo,完善驱动,测试通过,有需要的朋友可以查看信息。 + IntegrationFileClient: 完善文件的收发类,新增重载的构造方法,传入ip地址及端口即可。 + melsec: 三菱的MC协议部分错误代码关联了文本信息,在测试的时候即可弹出错误信息,方便排查,常见了已经绑定。 + melsec: 新增3e协议的随机字批量读取操作,支持跨地址,跨数据类型混合交叉读取,一次即可读完。 + fileserver: 修复linux下的bug,新增上传文件后的触发事件,将文件的信息都传递给调用者。 + SiemensMpi: 添加MPI协议,并完善demo,等待测试。 + 本组件从v8.0.0开始进入付费授权模式,详细参考官方:http://www.hslcommunication.cn 。 + + + + + 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 。 + + + + + 三菱的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的读写类。 + + + + + Cip协议:cip协议开放Eip指令自定义输入,优化指令生成算法。 + Cip协议:Write(string address, byte[] data)方法提示使用WriteTag信息。 + NetworkDoubleBase: 修复bool异步读写提示不支持的bug,现在可以使用异步了。 + SAMSerial:新增身份证阅读器的串口协议,支持读取身份证信息,头像信息还未解密。 + SAMTcpNet:新增身份证阅读器的串口透传协议,支持读取身份证信息,头像信息还未解密。 + BeckhoffAdsNet:新增倍福plc的协议,还未通过测试。 + + + + + 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日和王女士结婚,地址是浙江省金华市兰溪市马涧镇,欢迎有空的老铁们来坐坐,带红包就行。 + + + + + 宣布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 + 加油,武汉!加油,中国!疫情之后,无人自动化工厂将会获得更大的关注和发展,我辈当自强。 + + + + + 底层的网络在对方关闭连接后,不再等待接收,直接返回对方已关闭的错误信息,提供通信的性能。 + 四个服务器类,complexserver, simplifyserver,mqttserver,websocketserver开发关闭客户端连接的方法,调用者可以手动操作关闭。 + MQTT服务器新增一个客户端上线事件,包含客户端的会话参数,方便实现一些特殊的场景需求,在api文档中增加调用示例。 + Websocket服务器新增一个客户端上线事件,包含客户端的会话参数,方便实现一些特殊的场景需求。 + Websocket服务器添加0x0A的心跳返回,用于有些客户端的心跳验证操作。 + RedisClient: redis相关的代码优化,调整,添加了异步api接口,本机性能测试不如同步,有待优化。 + RedisClient: 新增基于特性的读写,自动组合键批量读取,组合哈希键批量读取操作,提升性能,详细参考api文档。写入操作不支持列表相关的特性。 + Demo的写入byte操作的反射代码获取失败的bug修复。 + + + + + 修复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 + + + + + 修复汇川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产品展示平台,欢迎大家关注。 + + + + + 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产品展示平台,欢迎大家关注。 + 三年磨一剑,直插工业互联网的心脏。软件开发之艰辛,如人饮水冷暖自知。感谢所有支持的朋友。 + + + + + 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的目标是打造成工业互联网的利器,工业大数据的基础,打造边缘计算平台。 + + + + + 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的目标是打造成工业互联网的利器,工业大数据的基础,打造边缘计算平台。 + + + + + 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的目标是打造成工业互联网的利器,工业大数据的基础,打造边缘计算平台。 + + + + + ServerBase: 服务器对象基类完善客户端下线逻辑,精简相关的代码。 + LogNet:设备网络通讯类及串口类在数据收发的时候增加日志的记录,可以设置PLC类的LogNet属性抓取相关的报文信息。 + ModbusServer: Modbus服务器同时支持TCP,RTU,ASCII,其中RTU和ASCII共用一个串口,根据报文头是否为冒号区分。 + ModbusAscii: 修复通讯的bug,已通过单元测试,支持和ModbusServer完美通讯,欢迎网友继续测试。 + MelsecMcNet:三菱MC协议的数据地址新增对SB,SW,特殊链接继电器,寄存器的支持。 + SiemensServer: 西门子S7虚拟服务器的DB块支持DB1.X,DB2.X,DB3.X,3以上的db块都是使用同一个的DB块。 + HttpServer:自定义轻量级的WebApi服务器支持反射对象的方法名,简化定义API时定义大量的if...else...。 + UdpNet:添加ConnectionId属性,使用的方法获取信息。 + MelsecMcRNet:添加三菱R系列的MC协议二进制的实现,和标准的有一点区别,地址支持也不一样,欢迎测试Demo。 + OmronCip:欧姆龙的读写数组已经测试通过,修改了读写字符串的逻辑实现,等待测试。 + 代码注释优化,使用前请仔细阅读下面的信息:http://api.hslcommunication.cn + http://www.hslcommunication.cn/MesDemo 官网的地址以后作为优秀的MES产品展示平台,欢迎大家关注。 + HSL的目标是打造成工业互联网的利器,工业大数据的基础,打造边缘计算平台。 + + + + + HttpServer: 当客户端发起request请求的时候,在日志记录的时候记录当前的请求的方式,GET,POST,OPTION等等。 + MQTT: mqtt的消息等级追加一个新的等级,为OnlyTransfer等级,用来表示只发送服务器,不触发发布操作。 + MqttServer: 配合Qos等级为OnlyTransfer时,进行相关的适配操作,并触发消息接收的事件。 + MqttSyncClient: 新增MQTT的同步访问的客户端,协议头标记为HUSL,向HSL的mqtt服务器进行数据请求并等待反馈。尚未添加心跳程序。 + MqttServer: 适配同步客户端实现功能,当客户端为同步客户端的时候,调试心跳验证。 + 至此,HSL的MQTT协议已经是兼容几大网络功能了,在线客户端管理,消息发布订阅,消息普通收发,同步网络访问。 + IByteTransform接口属性新增IsStringReverseByteWord,相当于从ReverseByWord挪过来了,默认为false,如果为true,在解析字符串的时候将两两字节颠倒。 + Omron: 欧姆的fins-tcp及fins-udp及hostlink的IByteTransform接口IsStringReverseByteWord调整为true默认颠倒。 + SerialBase: 串口基类的打开串口方法调整返回类型OperateResult,在串口数据读取之前增加打开串口的Open方法,串口类也只需要一直读就可以了。 + NetworkDoubleBase, SerialDeviceBase, NetworkUdpDeviceBase及相关的继承类,对所有的泛型进行了擦除,一律采用接口实现,之后将统一java,python代码。 + FreedomTcp,FreedomUdp,FreeSerial: 添加基于自由协议的tcp,udp,串口协议,可以自由配置IByteTransform接口,可用来读取一些不常见的协议。 + Omron-cip: 读写字符串仍然没有测试通过,请暂时不要调用。 + SiemensS7: 单次读取之前是按照200字节进行拆分的,现在根据s7协议返回的报文来自动调整,1200系列是220字节,1500系列是920字节,其他等待测试。 + 官网的备案失效了,重新备案需要点时间,请访问 http://118.24.36.220 然后去顶部的菜单找相应的入口。 + 本软件已经申请软件著作权,软著登字第5219522号,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + HSL的目标是打造成工业互联网的利器,工业大数据的基础,打造边缘计算平台。 + + + + + Toledo: 托利多电子秤的字节触发的时候,传递出来携带原始的字节数组,方便自行处理,Demo界面优化,显示信息更加完善。 + Lsis: Lsis的PLC通信类修复一些bug,感谢埃及朋友的提供的技术支持。 + MqttSyncClient: 新增ReadString方法,以字符串的形式来和服务器交互,默认编码UTF8,当然也可以自己指定编码,本质还是读取字节数据。 + WebsocketClient: websocket的客户端类,重新设计异常重连,网络异常时触发 OnNetworkError 事件,用户应该捕获事件,然后在事件里重连服务器,直到成功为止。 + MqttClient: Mqtt客户端类,重新设计异常重连,网络异常时触发 OnNetworkError 事件,用户应该捕获事件,然后在事件里重连服务器,直到成功为止。 + MqttSyncClient: 支持读取数据的进度回调功能,支持三种进度报告,数据上传到服务器的进度报告,服务器处理进度报告,数据返回到客户端的进度报告。 + PanasonicMewtocol: 修复注释错误,L区的数据也可以进行L100F,L2.3访问。 + DLT645: 初步添加电力规约协议的串口实现,目前只实现了读取数据,还未测试,等待后续的测试完善。 + Omron-cip: 读写字符串仍然没有测试通过,请暂时不要调用。 + 官网的备案失效了,重新备案需要点时间,请访问 http://118.24.36.220 然后去顶部的菜单找相应的入口。 + 本软件已经申请软件著作权,软著登字第5219522号,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + HSL的目标是打造成工业互联网的利器,工业大数据的基础,打造边缘计算平台。 + + + + + MqttClient: 上个版本开放的网络错误事件,如果不进行事件绑定,增加默认实现,每隔10秒去连接服务器,直到成功为止。 + WebsocketClient: 上个版本开放的网络错误事件,如果不进行事件绑定,增加默认实现,每隔10秒去连接服务器,直到成功为止。 + DLT645: 电力规约协议完善,等待后续的测试完善。 + SerialBase: ReadBase提供一个重载的方法,ReadBase( byte[] send, bool sendOnly )支持单向发送,不接收数据返回。 + SoftBasic: HexStringToBytes算法优化,性能提升,移除了转大写字母的步骤。 + SiemensS7: 开放获取 pdu 数据长度属性,属性名称:PDULength + HslExtension: 增加IncreaseBy方法,但是测试发现不适用byte类型。 + Omron-cip: 读写字符串仍然没有测试通过,请暂时不要调用。 + 官网的备案失效了,重新备案需要点时间,请访问 http://118.24.36.220 然后去顶部的菜单找相应的入口。 + 本软件已经申请软件著作权,软著登字第5219522号,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + HSL的目标是打造成工业互联网的利器,工业大数据的基础,打造边缘计算平台。 + + + + + IReadWriteNet接口新增一个属性,ConnectionId,用来表示设备的唯一ID。 + ModbusTcpServer: Modbus的虚拟服务器支持0x16功能码,支持掩码写入操作,适用Tcp,Rtu,Ascii。 + Modbus客户端(tcp+rtu+ascii+rtuovertcp) 新增掩码写入方法,WriteMask,bool写入时,假如Write("100.1", true)就使用掩码写入寄存器100的第1位为真。 + RedisClient: redis的客户端新增Ping方法,DBSize方法获取key数量,FlushDB方法清除数据库所有key。 + DTUServer: 新增一个DTU服务器,可以用来实现对plc的反向连接操作,根据设备的唯一号来识别。 + Omron-cip: 读写字符串不成功的bug修复,已经测试通过。 + WebsocketClient: 实例化时新增url的额外参数传递,("127.0.0.1", 1883, "/A/B?C=123456"),也可以使用"ws://127.0.0.1:1883/A/B?C=123456"。 + WebsocketClient: 修复未连接服务器的时候,调用关闭方法将会引发发送异常的bug。 + MqttServer: 修复NET35版本不支持同步访问的bug,新增一个客户端断开连接的事件,OnClientDisConnected事件。 + VibrationSensor: 新增一个震动传感器的类,型号为苏州捷杰震动传感器VB31,支持获取速度,加速度,位移,温度信息。 + 官网的备案失效了,重新备案需要点时间,请访问 http://118.24.36.220 然后去顶部的菜单找相应的入口。 + 本软件已经申请软件著作权,软著登字第5219522号,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + HSL的目标是打造成工业互联网的利器,工业大数据的基础,打造边缘计算平台。 + + + + + Mewtocol: 松下的串口协议修复LD寄存器无法访问的bug,输入LD100,如果只输入L100,就是线圈。 + Modbus: 修复写入寄存器指定位bool失败的bug,写入true的掩码改为 FF FE,00 01 + Modbus:在ModbusRtuOverTcp里填写掩码写入的api方法。 + ab-plc:CIP协议解析标签地址的编码从ASCII编码修改为UTF-8编码,支持中文的标签名访问。 + omron-plc:CIP协议解析标签地址的编码从ASCII编码修改为UTF-8编码,支持中文的标签名访问。 + Websocket: 连接的请求标头修改为GET ws://127.0.0.1:8800/ HTTP/1.1 就是带IP地址及端口信息 + Redis:Redis的客户端添加对集合和有序集合操作的相关API方法,基本支持了所有需要的操作信息,单元测试通过。 + Demo: 所有DEMO写入数据操作,新增Hex写入,输入1A 1B等十六进制数据,然后底层调用Write(string, byte[])方法。 + Demo:Redis的功能菜单新增一个测试界面,用来同步两个不同的redis的数据,也可以同一个redis不同的db块数据。 + 官网的备案失效了,重新备案需要点时间,请访问 http://118.24.36.220 然后去顶部的菜单找相应的入口。 + 本软件已经申请软件著作权,软著登字第5219522号,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + HSL的目标是打造成工业互联网的利器,工业大数据的基础,打造边缘计算平台。 + + + + + CipServer: Cip的虚拟服务器的数据节点编码修改为UTF8编码,增加了一些可读性比较强的增加节点的api,支持赋值初始化数据。 + Demo: Kuka机器人的连接问题,请参考下面地址:http://blog.davidrobot.com/2019/03/hsl_for_kuka.html?tdsourcetag=s_pctim_aiomsg + Redis: 增加读取TTL的api方法,方便的获取剩余的生存时间。 + HttpServer: 修复Response为空时进行AppendHeader时发生的bug,进行二次校验。 + VibrationSensorClient: 修复deme站号设置失效的bug,站号根据接收的数据动态调整,增加检测长时间未接收传感器数据,就选择重连的功能。 + 官网的备案失效了,重新备案需要点时间,请访问 http://118.24.36.220 然后去顶部的菜单找相应的入口。 + 本软件已经申请软件著作权,软著登字第5219522号,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + HSL的目标是打造成工业互联网的利器,工业大数据的基础,打造边缘计算平台。 + + + + + NetworkBase: 同步网络通信的超时检查不再开新的线程检查,使用socket自带的ReceiveTimeout来检查。 + NetworkBase: 发送数据时,增加对发送数据的空检查,如果为空,就认为成功。 + RedisClient: 新增修改密码的API接口,可以进行对redis的密码重置操作。 + MqttServer: 当同步客户端 MqttSyncClient连接上来时,不进行触发上下线事件。 + MqttServer:原先支持获取所有的在线客户端,现在新增获取异步客户端列表,获取同步客户端列表。 + MqttSubscribeMessage: 类型拼写错误修复,如果使用这个类,请谨慎升级。 + Keyence: 基恩士的MC协议,支持CC,TC的数据类型读取。 + FanucSeries0i: 新增一个fanuc机床的数据通讯类,支持读取一些简单的数据,目前在Series0i-F上测试通过。 + Cip: 修复ab-plc的标签地址解析为UTF-8编码,但是长度确实字符串的bug,现在支持中文编码。 + 其他的注释优化 + 官网的备案失效了,重新备案需要点时间,请访问 http://118.24.36.220 然后去顶部的菜单找相应的入口。 + 本软件已经申请软件著作权,软著登字第5219522号,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + HSL的目标是打造成工业互联网的利器,工业大数据的基础,打造边缘计算平台。企业终身授权费:8000元(不含税)。 + + + + + MqttServer: 修复MQTT服务器开启时,当用其他的mqtt客户端订阅时,会发生异常的bug,原因在于订阅质量没有回传。 + WebsocketServer: websocket的服务器端新增一个客户端下线的事件,无论是正常关闭还是异常关闭,都会触发事件。 + MqttClient: Mqtt的客户端新增一个连接成功的事件OnClientConnected,重连成功后也会触发。在该事件的订阅topic会在网络恢复后重新订阅。 + NetworkDoubleBase: 当校验指令头失败的时候,返回的错误信息里追加,收发的报文,方便查找问题。 + MelsecA1EAsciiNet: 修复读取bool时,长度为奇数时,会出现交替失败的bug,原因出自数据粘包。 + WebsocketClient: 添加一个IsClosed属性,修复服务器强制断线导致客户端无限重连的bug。 + OmronConnectedCipNet: 添加一个基于连接的CIP的读写类,等待测试。 + 其他的注释优化 + 官网的备案失效了,重新备案需要点时间,请访问 http://118.24.36.220 然后去顶部的菜单找相应的入口。 + 本软件已经申请软件著作权,软著登字第5219522号,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + HSL的目标是打造成工业互联网的利器,工业大数据的基础,打造边缘计算平台。 + + + + + KeyenceNanoSerial: 基恩士的串口协议重新实现,实现IReadWrite接口,增加了单元测试。支持的地址需要查阅API文档信息。 + OmronHostLinkCMode: 支持了欧姆龙的HOSTLINK协议的Cmode模式的实现,初步单元测试通过,等待测试。 + MC协议:三菱MC协议的ZR区的地址进制从16进制改为10进制。 + NetworkDoubleBase: 添加一个PING的方法IpAddressPing( ), 对设备当前的IP地址进行PING操作。 + NetworkUdpBase: 添加一个PING的方法IpAddressPing( ), 对设备当前的IP地址进行PING操作。 + yamaha: 添加一个雅马哈机器人协议的实现,初步实现了几个api,等待测试,测试通过继续完善。 + DEMO: 主界面增加一个全国使用情况的分布图,统计DEMO的使用次数实现。 + 官网的备案失效了,重新备案需要点时间,请访问 http://118.24.36.220 然后去顶部的菜单找相应的入口。 + 本软件已经申请软件著作权,软著登字第5219522号,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + HSL的目标是打造成工业互联网的利器,工业大数据的基础,打造边缘计算平台。 + + + + + Networkbase:核心网络底层的错误码调整,当读写操作因为网络问题失败时,返回错误码为负数-1,如果连续读写失败,就一直递减。 + OmronConnectedCipNet: 地址解析修改为全部上29 00 报文。 + FileNet: 两种文件服务器支持删除多个文件和删除文件夹的所有文件功能,客户端同步适配,初步测试通过。 + NetSimplifyClient: 新增一个构造方法,可以传入IPAddress类型的ip地址。 + MqttSyncClient: 新增一个构造方法,可以传入IPAddress类型的ip地址。 + MqttClient: 修复一个连接反馈信号,解析判断服务器状态错误的bug,该bug导致MqttClient连接不是中国移动的OneNet物联网框架。 + FFT: 傅立叶变换FFTValue方法添加一个可选参数,是否二次开放,波形中的毛刺频段会更加明显。 + HttpServer: webapi的服务器完善注释,添加一个端口号的属性,获取当前配置端口号信息。 + Active: 当前库激活失效的时候,返回的错误消息,携带当前的通信对象的实例化个数,方便查找授权失败的原因。 + Abb机器人:abb机器人支持读取程序执行状态,任务列表功能,伺服状态,机器人位置数据。 + ABB虚拟机器人:新增一个abb机器人的虚拟webapi的服务器,可以用来测试和ABB客户端的通信。 + Demo: 数据转换的界面,新增一个显示指定的文件的二进制的内容的功能。当demo激活成功时,不显示时间及授权信息。 + 新增一篇全新的博文,介绍基于HSL的大一统网络架构实现,满足发布订阅,一对多通信,webapi等:https://www.cnblogs.com/dathlin/p/13416030.html。 + 官网备案成功了,地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注。 + 本软件已经申请软件著作权,软著登字第5219522号,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + HSL的目标是打造成工业互联网的利器,工业大数据的基础,打造边缘计算平台。 + + + + + Beckhoff: 倍福PLC新增读取设备信息和设备状态的api接口。在demo界面添加测试按钮,状态码检查优化,错误时返回报文信息。 + FanucSeries0i: 修复fanuc机床的读取宏变量解析double数据时,为0的时候解析异常的bug。 + ABBWebApiServer:ABB机器人的虚拟服务器支持用户名和密码设置,在客户端请求数据的时间,支持账户验证。 + Demoserver: 优化根据IP地址获取物理地址的方法,获取不到或是奇怪字符将切换线路重新获取。 + KukaTcpNet: 新增KukaTcp通讯类,支持多变量写入的api,在demo界面增加启动,复位,停止程序的操作。 + .Net Framwork 2.0 支持2.0的框架的dll发布,通过nuget安装即可。 + SimpleHybirdLock: 简单混合锁添加一个当前进入锁的次数的静态属性,可以查看当前共有多少锁,等待多少锁。 + NetworkDeviceBase: 核心交互方便增加错误捕获,异常释放锁,再throw, YamahaRCX类完善异步方法 + NetworkBase: 增加一个线程检查超时的次数统计功能。 + InovanceH3U: 修复汇川的3U的PLC地址类型为SM,SD时解析异常的bug。 + Demo: HslCommunication Test Demo支持PLC及一些连接对象的参数保存功能,使用英文冒号可以分类管理。 + WebSocketSession: 新增url属性,如果客户端请求包含url信息,例如:ws://127.0.0.1:1883/A/B?C=123, 那么url就是这个值。 + Demo: 测试的DEMO程序,支持连接参数存储,不用再每次打开程序重新输入IP地址,端口,站号等等信息,可以存储起来,还支持分类存储。 + 官网地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注。 + 本软件已经申请软件著作权,软著登字第5219522号,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + HSL的目标是打造成工业互联网的利器,工业大数据的基础,打造边缘计算平台。 + + + + + KeyenceNanoSerial: 修复读写R寄存器时,提示地址格式异常的BUG,已经测试通过。 + MelsecMcUdpServer: 新增三菱MC协议的UDP虚拟PLC,支持数据读写,支持二进制和ASCII格式。 + OmronFinsUdpServer: 新增欧姆龙Fins协议的UDP的虚拟PLC,支持数据读写操作。 + MqttServer: 修复MQTT服务器在客户端发送批量订阅的时候,服务器会触发BUG的问题。 + ConnectPool<TConnector>类代码注释优化,新增连接次数峰值属性。 + RedisSubscribe: 订阅服务器重新设计,订阅实现事件触发,支持手动订阅,取消订阅操作。 + RedisClient: 支持了订阅的操作,当订阅的时候,创建订阅的实例化对象,应该在连接参数设置之后再进行订阅。 + RedisClientPool:新增Redis连接池类,默认不限制连接数量,使用起来和普通的RedisClient一样,适合一个项目实例化一个对象。 + MqttSyncClientPool: 新增MqttSyncClient的连接池版本类,默认不限制连接数量,用起来和普通的MqttSyncClient一样。 + LogNetFileSize: 根据文件大小的日志类,实例化时支持设置允许存在的文件上限,如果设置为10,只保留最新的10个日志文件。 + LogNetDateTime: 根据日期的日志类,实例化时支持设置允许存在的文件上限,如果设置为按天存储,上限为10,就是保留10天的日志。 + AllenBradleySLCNet: 新增AB PLC的数据访问类,适合比较老的AB PLC,测试通过的是1747系列。地址格式为A9:0 + AllenBradleyNet: 读写bool值的时候,不带下标访问单bool数据,如果需要访问bool数组,就需要带下标访问,例如:A[0]。 + 官网地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注。 + 本软件已经申请软件著作权,软著登字第5219522号,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + AllenBradleyNet: ReadBool方法默认读取单bool类型变量,如果要读取int类型的bool数组,采用"i="开头表示,例如"i=A[10]" + NetworkDataServerBase: 新增一个属性ActiveTimeSpan,可以设置激活时间间隔,默认24小时,锁优化,其他的继承实现的服务器都进行了设置。 + NetworkDeviceBase: Read<T>修改为虚方法,支持继承进行重写,基于特性的类注释完善。 + Siemenss7net: ReadString(string address, ushort length)读取字符串时,如果长度为0,就读取西门子格式的字符串。 + OperateResult: 扩充泛型方法,Check, Convert, Then,实现了结果链,简化代码。参考:https://www.cnblogs.com/dathlin/p/13863115.html + FanucSeries0i: 修复数控机床在读取0i-mf状态时导致长度不够的bug。 + IReadWriteNet: 新增wait方法接口,用于等待一些信号到达指定的值,支持扫描频率设置,超时设置。例如 Wait("M100.0", true, 500, 10000)等待这个信号为true为止。 + MqttServer: 支持调用ReportOperateResult返回错误信息及错误码给客户端,MqttSyncClient会自动识别报文,然后IsSuccess自动适应,网络不会断开。 + MqttSyncClient: 支持设置接收超时时间,默认是60秒,之前是5秒,而且不能更改。 + MqttServer: 支持注册远程RPC的API接口,自动解析json参数,自动调用已经注册的接口自动返回是否成功,MqttSyncClient也支持遍历服务器的接口列表。详细:https://www.cnblogs.com/dathlin/p/13864866.html + SiemensS7Net: 通信类实现ReadBool("M100", 10); 批量读bool方法,通过读Byte间接实现。 + OmronHostLinkCModeOverTcp: 新增欧姆龙的通讯类,Cmode模式的以太网透传实现。 + PLC: 所以的PLC实现了HslMqttApi特性支持,从而在MqttServer里可以直接注册,然后对外开放读写接口操作。 + 官网地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注。 + 本软件已经申请软件著作权,软著登字第5219522号,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + MQTTServer: 服务器端在注册M-RPC远程调用接口服务的时候,如果你的接口实现了参数默认值,那么就提取到示例参数里。 + KeyenceSR2000SeriesTcp: 新增基恩士的SR2000系列的扫码器的驱动,目前是TCP版本,支持读码,读取记录,停止复位等,支持自定义的命令。 + XGKFastEnet: 新增Lsis的XGK系列的FastEnet实现。 + XGKCnet: 新增Lsis的XGK的cnet的实现。 + Demo: Demo的TCP调试的服务器端优化,错误获取优化,发送数据失败的问题修复。 + NetworkBase: 底层异步的数据接收的超时优化,优化超时线程池实现,更加节省线程调度。 + MqttSyncClient: 客户端支持读取MQTT服务器的驻留主题列表,读取该主题的相关的数据信息。详细见demo。 + MqttServer: 修改ClientVerification事件,增加会话句柄传递,支持动态修改client id,支持设置当前客户端禁止发布任何数据。 + MqttServer上的MRPC的权限控制仅对商业授权用户开放,MqttSyncClientPool连接池以及RedisClientPool连接池仅对商业授权用户开放。 + 官网地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注。 + 本软件已经申请软件著作权,软著登字第5219522号,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + XGKFastEnet修复了一点小问题,感谢埃及朋友提供的技术支持。 + KeyenceSR2000Serial: 新增基恩士的SR2000系列的扫码器的串口版驱动,支持读码,读取记录,停止复位等,支持自定义的命令。 + IKeyenceSR2000Series: 新增基恩士的SR2000系列的扫码器接口,优化读码功能,如果读码失败,则发送LOFF命令。 + LogStatistics: 新增统计次数的辅助类,可以实现关于时间的一些统计信息,比如统计每小时,每天,每周,每月等的登录量,使用量信息。 + LogValueLimit: 新增数据极值类,用于统计一个数的开始值,结束值,最大值,最小值,平均值,然后可以按小时,天,周,月等统计。 + OmronHostLink: 修复解析错误码时,如果错误码不为数字的时候会导致奔溃的bug,错误提供内容更加详细。 + ILogNet: 日志记录的方法实现MqttApi特性,可以在MQTTServe里面注册为RPC服务,从而实现远程调用日志写入的方法。 + ILogNet: 日志类方法新增属性LogStatistics,只要实例化就可以统计当前的日志记录情况,可以每分钟,每小时,每天,每周,每月,每季度,每年。 + MqttClient: 新增一个订阅的api接口,支持直接传递MqttSubscribeMessage对象,可以指定消息质量。 + XinJEXCSerial: 新增信捷的XC系列的串口通讯类,底层是modbus-rtu,地址做了封装,按照信捷的地址输入即可,比如X1,Y7,M1000,D100,F100,E100。 + MelsecFxSerial: 三菱编程口类新增 IsNewVersion 属性,如果为false,就是老版本的协议,修复T,C线圈读写的地址不对BUG。 + 官网地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注。 + 本软件已经申请软件著作权,软著登字第5219522号,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + ModbusRtuOverTcp: 更改继承,直接从NetworkDeviceBase进行继承,通过单元测试 + YokogawaLinkTcp: 新增横河PLC的二进制通讯类,支持X,Y,I,E,M,T,C,L,D,B,F,R,V,Z,W,TN,CN读写,部分高级API商业授权用户才能使用,例如读取PLC信息。 + YokogawaLinkServer: 新增横河PLC的二进制格式的虚拟PLC,模拟的真实的PLC的通信机制,实现了读写长度的限制,以及错误信号的返回。 + Networkdoublebase: ReadFromCoreServer( byte[] send, bool hasResponseData ) 新增是否等待数据返回的属性,可以用于某些不需要数据返回的命令。 + Networkbase: 修复异步接收数据时,某些情况下长度为0导致连接关闭的bug。 + FetchWriteServer: 新增西门子fetch/Write协议的虚拟PLC,支持虚拟数据的读写,通信。 + MelsecFxSerialOverTcp: 修改继承体系,从NetworkDeviceBase继承,和MelsecFxSerial的IsStringReverseByteWord调整为true; + 文件引擎服务器修复路径大小写导致的bug问题,文件客户端支持检查文件是否存在的方法,检查文件是否存在。 + MqttServer: 远程调用的MRPC的参数支持自定义类型,通过JSON转换,将字符串转换为实体类。还有其他的优化。 + DeltaDvpSerial, DeltaDvpSerialAscii, DeltaDvpTcpNet: 添加台达的通信类,输入台达的地址即可,会自动转换实际的modbus地址。 + 所有的虚拟PLC的服务器均调整为商业授权用户专享,还有一些高级的API,具体看api注释是否带有[商业授权]字样,基本的数据读写功能将一直对个人用户开放。 + Demo: 数据读写示例的界面,写入现在支持批量写入,数据写[1,2,3],然后写入short,就是写入short数组了。 + 普通VIP的个人使用不再限制100个PLC对象,连续运行时间调整为10年,高级的一些API限制商用,参考注释是否带[商业授权]字样。 + 官网地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注。 + 本软件已经申请软件著作权,软著登字第5219522号,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + YokogawaLink: 异步的方法添加和完善,虚拟PLC侧支持Special:100开头的地址,表示特殊模块寄存器,从而支持各种类型的读写。 + LogStatistics, LogValueLimit: 两个数据日志分析类支持获取指定时间段的数据,数据存储文件格式重新设计,为不兼容更新。 + LogStatisticsDict, LogValueLimitDict: 新增数据日志分析的词典类,用来统计多个数据的不同时间段的使用情况。 + 所有的基于tcp的plc,机器人,redis, mqtt, websocket等通讯类的ip地址支持直接输入域名,会自动调用Dns.GetIpAddress来解析。 + MqttRpcApi: MRpc的API特性支持应用在属性上,不需要传递参数,直接获取属性的值,在demo上显示的小图标不一样。PLC的通讯类的基本属性在MRPC公开。 + MelsecFxLinks: 支持读取PLC的型号,读写数据的地址支持了站号指定,地址可以写成[s=2;D100],方便多站号读取。 + AllenBradleyNet: 地址支持slot参数,例如:slot=2;AAA ,也可以不携带,这个是可选的。 + FatekProgram, FujiSPB, XGBCnet, MelsecA3CNet1, OmronHostLink, OmronHostLinkCMode, PanasonicMewtocol, SiemensPPI,信捷,汇川类及其透传类支持地址携带站号,例如 s=2;D100 + FujiSPBServer: 新增富士PLC的虚拟服务器,支持串口和网口,原先的富士PLC存在bug,不能读取,欢迎网友对富士PLC测试。 + HttpServer: 删除原先的HttpGet和HttpPost特性,改用MRPC的特性,支持注册webapi服务,使用方式和MRPC类似,demo增加httpsclient可浏览接口,https://www.cnblogs.com/dathlin/p/14170802.html + HttpServer, MqttServer: 服务器端支持接口调用的次数统计,支持客户端查询接口调用情况,demo客户端实现mqttclient,方便服务器管理在线客户端信息。 + 其他优化改进,如果有网友发现bug,配合作者测试并修复bug,将根据实际情况给与现金红包奖励。 + 普通VIP的个人使用不再限制100个PLC对象,连续运行时间调整为10年,高级的一些API限制商用,参考注释是否带[商业授权]字样。 + 官网地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注。 + 本软件已经申请软件著作权,软著登字第5219522号,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + Lsis XGK: 修复部分的问题,感谢埃及朋友提供的支持。 + FujiSPB: 修复未在net20, net35, net standard项目里添加的bug。 + MqttServer和HttpServer: 注册API的方法支持对静态方法的注册,注册时传入类型对象即可。 + Modbus: tcp, rtu, ascii, rtu over tcp在读写int,uint,float,double,long,ulong时支持动态指定dataformat,地址示例:format=BADC;100 + MqttServer: 扩展MQTT的子协议FILE,支持文件的上传,下载,删除,查看信息,权限控制操作,支持获取上传下载网速监控。 + MqttSyncClient: 扩展文件的方法接口,支持上传,下载,删除,遍历文件操作,每个操作都是短连接的,使用的全新的socket对象。 + SiemensS7Net: 修复西门子s7协议某些情况数据批量写入失败的bug,原因来自PDU长度信息不对。 + DLT645: 修复一些问题,已经测试通过,新增 DLT645OverTcp,感谢 QQ:542023033 提供的技术支持。 + FanucInterface: 机器人的解析数据时,当shift_jis编码不存在时,将会引发异常,现在自动替换UTF8 + HslCommunication: 所有的异步通信代码优化,优化超时检测机制,现在大大提升了服务器的高并发的能力,异步通信的性能。 + AllenBradleyNet及OmronCipNet协议支持 UINT, UDINT, ULING类型的写入,对应的C#的类型是 ushort, uint, ulong + 官网地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注。 + 本软件已经申请软件著作权,软著登字第5219522号,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + OmronConnectedCipNet: 新增欧姆龙的基于连接的CIP实现,测试读写欧姆龙PLC成功,支持数组读写,详细参考API文档,欧姆龙的CIP请使用本类。 + AllenBradleyNet: 修复当自动重连时,连接的ID 还是上次的 ID 导致读写失败的bug。 + DLT645: 点对点模式下,在读取地址域的时候,新增读取成功后即修改当前的地址域信息,也即是在打开串口后,读取地址域即可通信。 + DLT645: 修复有些数据格式不一致导致读取数据不正常的bug,已经测试可以读取功率,能耗,电压电流,电表基本信息,还支持自定义的解析格式。 + NetworkAlienClient: DTU客户端增加对连接客户端的注册包的数据校验,修复数据意外的情况导致程序奔溃的bug。 + Demo: 在 演示程序里,Modbus的DTU的示例界面,修复 ID 设置时,结果设置到 IP 导致异常的bug。另外增加西门子的DTU演示界面。 + LSisServer: 修复同一地址,数据读写不对的bug,和 XGKFastEnet 客户端读写测试通过,包括bool类型地址,字地址 + GeSRTPNet: 新增 GE-PLC(通用电气) 的SRTP协议实现的客户端,支持I,Q,M,T,SA,SB,SC,S,G 的位和字节读写,支持 AI,AQ,R 的字读写操作。 + GeSRTPServer: 新增 GE 的 SRTP 协议的虚拟PLC,支持和 GeSRTPNet 通信测试。支持类型和客户端支持的一致。 + MqttServer: 在启动文件服务功能时,增加对分类路径,以及文件名的合法性进行校验,防止注入特殊字符攻击及意外bug。 + MqttSession: 新增一个方法,GetTopics() 用于获取当前的会话对象所订阅的主题的副本数据。 + PanasonicMewtocol: 修复 Mewtocol及串口转网口类,在批量读取 bool 数组地址解析不准确的bug。 + MelsecCipNet: 新增三菱的CIP协议功能,PLC使用了 QJ71EIP71 模块时就需要使用本类来访问。 + SickIcrTcpServer: 修复当关闭服务器的时候,现有的连接没有关闭的bug,没有关闭的话,仍然会接收到来自设备发来的条码信息。 + 官网地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注。 + 本软件已经申请软件著作权,软著登字第5219522号,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + SickIcrTcpServer: 修复手动连接扫码设备的网络在关闭服务器后仍然会自动重连的bug。 + SoftBasic: 删除SpliceTwoByteArray及SpliceByteArray方法,改为泛型支持的SpliceArray方法,支持任意类型拼接,添加了扩展方法支持。 + Modbus: 支持 0x16 功能码,用于掩码操作,支持对寄存器地址的位操作,需要设备方支持,该功能仅支持商业授权使用。 + Modbus: 读取线圈和输入线圈的长度支持任意,内部按照2000长度自动切割,读取寄存器和输入寄存器按照120自动切割,该功能商业授权特权,普通的VIP用户存在长度限制。 + MqttSyncClient: 新增ReadRpc<T>(string topic, string payload )方法,专门用来读取注册的RPC接口的,自动json转换类型。 + MqttSyncClientPool: 连接池优化,注释优化,添加了一些缺失的方法。该功能商业授权特权。 + RedisClientPool: 连接池优化,注释优化。该功能商业授权特权。 + LogNet: 日志部分新增一个 ConsoleOutput 属性,如果设置为 true,那么日志就会在控制台进行输出,等级不一样的日志,文字颜色不一样。 + LogNet: 日志部分的记录优化调整,取消了一些底层的重复记录的日志内容,针对 MQTT, Websocket, HTTP 及虚拟PLC相关的日志记录根据信息进行优化。 + 祝大家新年生意滚滚,身体健康,牛年大吉。 + 官网地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注。 + 本软件已经申请软件著作权,软著登字第5219522号,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + ILogNet: 当ConsoleOutput为true时,修复在空字符串的存储路径时,不进行控制台输出的bug。 + SiemensS7Server: 优化握手报文的信息,现在支持sharp7进行数据通信了。 + SiemensS7Net: 开放了 ConnectionType 和 LocalTSAP 属性,方便按照自己的需求修改,具体看属性注释。 + SiemensS7Net: 西门子的PLC读取支持0x0A和0x06的错误码,当读取DB块不存在时,提示错误消息。 + SiemensS7Net: 支持了 WString 类型的读写,使用ReadWString和WriteWString方法,支持中文的读写 + SiemensS7Net: 西门子S7协议的地址解析,DB块地址优化,DB1.DBW1 的 DBX,DBB,DBW,DBD都会自动屏蔽。 + SiemensS7Net: 在核心的报文交互上,自动忽略只有7字节的TPKT和ISO的报文的情况。 + MqttServer, HttpServer:RPC注册的方法,原先只支持一个泛型的结果类 OperateResult<T>, 现在支持任意个泛型的结果类对象。 + FanucSeries0i: 所有的方法实现异步接口,并增加了 RPC 的特性支持,方便直接注册就可以调用。 + SimensFetchWriteServer: 修复在standard项目里没有添加的bug。 + MelsecMcNet: 修复ReadMemory的报文错误,增加读取智能模块的ReadSmartModule方法。 + NetworkDataServerBase: 所有的虚拟PLC的基类,添加获取所在在线客户端信息的属性 GetOnlineSessions + Demo: 所有读写PLC的界面在读写的时候,增加提示耗时的信息,包括最大值,最小值。 + 官网地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注。 + 本软件已经申请软件著作权,软著登字第5219522号,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + SiemensS7Net: 修复上个版本的DB块位地址解析的bug,写入DB1.0.5为True的时候,却写入了DB1.0.0为True。 + AllenBradleyDF1Serial: 初步添加AB-PLC的DF1协议,支持了简单的读写,等待测试,地址示例:N7:0。 + 官网地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注。 + 本软件已经申请软件著作权,软著登字第5219522号,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + SoftCRC16: 计算CRC16的辅助方法,开放预置值的设定,可以自由的指定。 + FanucSeries0i: 新增一个读取机床系统语言的api,读取之后将会自动切换语言,暂不支持根据消息自动匹配编码解析。 + SiemensS7Net: OperateResult<byte[]> Read( string[] address, ushort[] length )接口添加RPC支持 + NetworkDataServerBase: OnDataReceived事件签名修改为DataReceivedDelegate( object sender, object source, byte[] data ),追加一个source参数,可用来获取客户端IP地址,具体看api文档 + NetworkDoubleBase: 增加LocalBinding属性,如果需要绑定本地ip或是端口的,可以设置,所有的网络类PLC都支持绑定本地的ip端口操作了。 + NetworkUdpBase: 增加LocalBinding属性,如果需要绑定本地ip或是端口的,可以设置,所有的网络类PLC都支持绑定本地的ip端口操作了。 + SiemensS7Net: 完善异步的PDU自动长度信息,新增AI,AQ地址的读写,地址格式:AI0,AQ0,欢迎大家测试。 + OmronFinsNet: 欧姆龙FINSTCP协议的SA1机制调整为自动获取,不需要在手动设置,修复错误信息文本和错误码不匹配的bug。 + MqttClient: 修复在网络异常导致正在重连服务器的时候,调用ConnectClose方法后,后台仍然不停的重连服务器的BUG。 + NetworkDeviceSoloBase: 删除这个文件,并优化相关的串口透传类。全部改为继承自:NetworkDeviceBase + NetworkDataServerBase: 所有派生类的虚拟服务器,包括modbus,s7, mc, fins等服务器全部支持设置是否允许远程写入操作,modbus的demo界面添加是否允许的选项。 + WebSocketClient: 修复客户量的Request报文少一个换行信号在某些服务器会连接失败的bug,新增两个发送数据的api,发送数据更加的灵活。 + 官网地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注。 + 本软件已经申请软件著作权,软著登字第5219522号,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + OmronFinsNet, OmronFinsUdp, HostLink: 地址的解析优化,在读取的API方法里,自动按照500长度进行切割,可以由 ReadSplits 更改。 + FanucSeriesOi: Fanuc数控机床支持R数据的读取,参考API: ReadRData(int start, int end) + HslExtension: 新增从字节数组获取位值的扩展方法: GetBoolValue( this byte[] bytes, int bytIndex, int boolIndex ) + FatekProgram: 地址解析优化,修复 RT,RC地址解析不正确的bug,读取的字及位长度自动切割,调用不受长度限制。 + SoftBasic: 添加设置byte数据的某个位的方法SetBoolOnByteIndex,也可以调用byte的扩展方法,byte.SetBoolByIndex(2, true) 就是设置第二位为true + FujiSPHNet: 新增支持富士的SPH以太网协议,支持M1.0, M3.0, M10.0, I0, Q0地址的读写操作,支持位的读写操作。写位需要谨慎,先读字,修改位,再写入。 + net20, net35, net451三个框架版本的项目引用 http.web 组件,用来修复 HttpServer 里url携带中文时,会导致解析乱码的情况,现在支持了中文的api接口注册,中文参数。 + HttpServer: 使用了注册RPC接口时,返回调用方的数据内容格式调整为json格式,方便postman等测试工具识别内容。 + FujiSPHServer: 新增富士SPH协议的虚拟服务器,支持和FujiSPHNet进行测试通信。支持的地址是一致的。 + KeyenceNanoSerial: 基恩士的上位链路协议优化,支持了B,VB的bool读写,W,VM的字读写,新增bool数组写入功能。 + KeyenceNanoSerial: 支持了plc型号读取,状态读取,注释读取,扩展缓存器的读写,错误代码提示携带更详细文本,适用于 KeyenceNanoSerialOverTcp + KeyenceNanoServer: 新增基恩士上位链路协议的虚拟服务器,可以和 KeyenceNanoSerialOverTcp 进行通信测试。 + KeyenceSR2000: 基恩士扫描的协议的错误提示信息新增了英文模式下的注释,原来的只有中文的提示。 + 官网地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注。 + 本软件已经申请软件著作权,软著登字第5219522号,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + MqttSyncClient: ReadRpc<T>方法提示JSON转换错误消息更加友好,注释完善。 + MelsecMcServer: 三菱的虚拟plc新增对B,R,ZR的地址支持。 + FujiSPHNet: 富士PLC实现按照240长度自动切割,支持无限长的数据读取。 + MqttClient(不兼容更新): 接收服务器数据的事件签名修改,MqttMessageReceiveDelegate( MqttClient client, string topic, byte[] payload ); + WebSocketServer: 优化数据发送部分的功能逻辑代码,将数据发送从锁中解脱出来。 + MqttClient: 新增属性 ConnectionOptions 用来获取当前连接参数信息。 + Omron: Hostlink协议的读取字数据时,长度进行切割,按照260字切割,可通过ReadSplits属性修改。 + PanasonicMewtocolServer: 初步添加mewtocol的虚拟plc,初步测试R地址成功。 + 设备通信核心: tcp, udp, 串口三大通信内核添加,封包和解包的虚方法,可以重写实现自定义需求。 + IModbus: 新增IModbus的设备接口,用来描述Modbus相关的设备,包含站号,DataFormat属性等。 + Modbus: 包含TCP,RTU,ASCII,RTU-over-tcp,UDP全部结构优化,重写,完善,最终一套代码实现覆盖以上类,接口无变化。 + 但是如果用调用了ReadFromCoreServer则不兼容,现在都只需要传核心报文,01 03 00 00 00 01,无论rtu,tcp,ascii + Modbus: 支持对寄存器,输入寄存器的位数据读取,ReadBool("100.1") 就是读取寄存器地址100的第一个位的bool值。 + MqttSubscribeMessage: Identifier默认设置为1,这样可以修复在某些服务器(mosquitto)订阅异常的bug。 + SerialBase(不兼容更新): ReadBase串口基本的交互方法重命名为ReadFromCoreServer,这样与TCP,及UDP的方法标准一致。 + FanucInterfaceNet: 支持 R 地址的读写,支持R1-R10,其中R1-R5为int数据,R6-R10为float数据。SR1-SR6进行字符串读写。 + BeckhoffAdsServer: 新增ADS的虚拟PLC,支持M100, I100, Q100地址格式。暂不支持内存地址,变量名。 + SiemensS7Net: 修复9.6.4版本添加的ConnectionType, LocalTSAP属性对 200,200smart型号的影响。 + 官网地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注。 + 本软件已经申请软件著作权,软著登字第5219522号,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + V10版本:本来上个版本就应该定为V10版本,因为已经内核优化,出现不兼容更新,所以这个版本果断设定为V10版本。 + SerialBase: 修复在串口异常的情况下,会抛出异常的bug,是上个版本的问题,现在会返回失败的OperateResult对象。 + ShineInLightSourceController: 新增昱行智造科技(深圳)有限公司的光源控制器的通信对象,主要用于视觉的打光操作。 + MqttSession:Mqtt的会话信息增加一个object Tag属性,用来自己绑定一些自定义的数据。 + SerialBase: 串口初始化的方法修改为虚方法,允许在继承类里进行重写,修改一些默认参数信息。 + NetworkBase: 修复ReceiveAsync异步方法在length=-1时,对方关闭时返回仍然为成功的bug,只有在极少数情况下会触发。 + ModbusTcpServer: 新增一个属性UseModbusRtuOverTcp,只要设置为True,就可以创建ModbusRtuOverTcp的对应的服务器,使用TCP传送RTU报文。 + HttpServer: 新增SetLoginAccessControl( MqttCredential[] credentials )方法,用于增加默认的账户控制,如果传入null,则不启动账户控制。 + IReadWriteDevice: 新增设备读写接口,继承自IReadWriteNet,然后所有设备实现IReadWriteDevice接口,相关继承关系优化,接口增加ReadFromCoreServer。 + All: 统一所有的设备核心层打包报文方法名为:PackCommandWithHeader 解包的方法名为UnpackResponseContent,允许重写实现自定义操作。 + Omron: 对OmronFinsTcp和OmronFinsUdp的通信层大幅度优化,统一代码规则,新增run,stop,读取cpu数据,cpu状态的高级方法。 + DTSU6606Serial: 新增德力西电表的采集类,基于modbusrtu实现,ReadElectricalParameters方法可以直接获取电表相关参数。 + HslExtension: 有两个获取byte的位的方法,功能重复,删除GetBoolOnIndex方法,使用GetBoolByIndex方法。 + 官网地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注。 + 本软件已经申请软件著作权,软著登字第5219522号,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + FatekProgram: 串口类和串口转网口透传类优化,统一一套代码来读写设备。 + IDisposable: NetworkAlienClient, NetworkAlienClient, LogNetBase, MqttClient, MqttServer, WebSocketClient, WebSocketServer实现释放接口。 + SiemensS7net: 新增DestTSAP属性,优化了LocalTSAP和DestTSAP属性对不同系列plc的值设置,当plc为s200系列时,支持设置自定义的值来访问plc。 + UltimateFileServer: 文件服务器删除目录所有文件调整为直接删除整个目录,新增支持删除指定目录下所有空的子目录的功能。文件客户端新增匹配操作的方法。 + PanasonicMcNet: 地址新增支持SD数据类型,示例SD0,返回的错误代码修改为松下的专用信息,和三菱的不一致。 + IModbus: Modbus接口新增TranlateToModbusAddress( string, byte) 接口,只要继承重写该方法,即可轻松实现自定义地址解析转modbus地址。 + Delta: 台达相关的类根据modbus最新的优化,全部进行优化,每个类只有一点点代码了。 + FujiSPB: 富士的串口协议代码和串口透传代码优化,修复串口类调用异步写bool失败的bug。 + XinJE: XinJEXCSerial重命名为 XinJESerial类,根据modbus的优化进行精简,支持了信捷系列选择,可选XC,XJ,XD,地址支持根据所选型号自动解析。 + XinJE: 新增基于串口透传的XinJESerialOverTcp类,以及modbustcp协议的XinJETcpNet类,DEMO上支持测试。 + Inovance: 汇川的类优化,删除原来的AM,H3U,H5U类,改用InovanceSeries枚举来区分系列,然后解析不同的地址。同时添加InovanceSerialOverTcp串口转网口类。 + OmronFinsServer: 欧姆龙的FinsTCP虚拟服务器端支持E数据块,E0.0-E31.0 都是指同一个数据块。 + IByteTransform: 新增二维数组的解析方法接口,主要是short,ushort,int,uint,long,ulong,float,double类型。 + Demo: MelsecSerialOverTcp的demo界面添加是否新版的选择。 + 如果有用到汇川,信捷的类库,请注意升级时出现不兼容,需要修改下类型,指定PLC的系列,感谢支持。 + 官网地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注。 + 本软件已经申请软件著作权,软著登字第5219522号,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + OmronFinsServer: 修复服务器的内存数据保存本地文件及加载文件时,不支持em区数据的bug。 + ISessionContext: 新增会话信息接口,在MqttServer和Httpserver中,在注册RPC时可以在方法参数里追加ISessionContext接口的上下文信息,用来控制当前api的对不同账户的权限。 + Modbus: TranslateToModbusAddress 单词拼写错误的修复。 + FujiSPBAddress: 地址类的继承改成 DeviceAddressDataBase + ModbusHelper: 在所有modbus及派生类里,当实现地址转换后,修复写bool,bool[]时地址仍然不转换的bug。 + KeyenceNano: 新增 UseStation 属性,用来设定是否开启使用站号的报文功能,有些特殊的情况需要站号。 + KeyenceNano: 串口类和串口转网口透传类优化,统一一套代码来读写设备。 + 其他的注释优化,代码优化 + 官网地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注。 + 本软件已经申请软件著作权,软著登字第5219522号,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + Melsec: 三菱的MC协议TCP,UDP,二进制,ASCII代码优化,一套代码实现,新增IReadWriteMc接口,针对MC协议的设备通用读写类 + NetworkUdpBase: 新增LogMsgFormatBinary属性,可以指示当前的数据交互报文记录时按照ASCII编码显示,或是二进制显示。 + DTSU6606Serial: 德力西的电表的读取方法ReadElectricalParameters支持HslMqttApi特性,方便MRPC及WEBAPI接口服务注册。 + Demo: Modbus rtu的demo界面的报文读取取消crc封装,因为内部已经集成封装。 + Melsec: 统一 MelsecMcNet, MelsecMcUdp, MelsecMcAsciiNet, MelsecMcAsciiUdp, MelsecMcRNet的代码逻辑结构,修复了ASCII格式类的一些bug。 + MelsecMcServer: 三菱的虚拟服务器限制了bool读取长度7168限制字读取长度960,三菱MC客户端的bool读取支持自动切割。 + OmronHostLink: OmronHostLink及OmronHostLinkOverTcp代码优化,完善错误代码文本提示,增加返回命令和发送命令校验的操作。 + HslExtension: ToStringArray的扩展方法支持对GUID的解析功能,不支持.net20, .net35 + NetworkDataServerBase: 修复数据类服务器在主动关闭引擎时,在线客户端的数量未及时复原的bug,影响范围,所有的虚拟PLC服务器。 + OmronHostLinkServer: 新增欧姆龙HostLink协议的虚拟PLC,支持网口和串口的进行读写操作。优化hostlink协议的客户端错误代码含义展示,优化数据接收机制。 + Demo: httpclient界面支持对https接口测试,在内容请求的header支持添加content-type信息,提供了一些选项。 + SimensWebApi: 新增NetworkWebApiDevice设备类,实现IReadWritteNet接口,新增SimensWebApi类,用于西门子1500的webapi接口,可实现读写标签变量信息。 + FanucSeries0i: fanuc的通信类支持NC程序文件的上传和下载,删除,设置主程序号,启动加工操作。修复刀具信息读取时,某个刀具信息失败导致读取失败的bug。 + AllenBradleyServer: ab-plc的虚拟服务器支持会话id的生成,支持对客户端校验会话id是否一致。 + Melsec: MC协议的类支持对字地址按照位读取,例如读取D100.5 开始的3个位,使用ReadBool("D100.5", 3)即可 + NetworkBase: 优化ReceiveByMessage及异步版本的性能,减少一次内容数据的拷贝操作,提升内存利用效率,提升读写的性能。 + SiemensS7Net: 西门子s7协议的地址支持 VB100, VW100, VD100的写法。 + 官网地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注。 + 本软件已经申请软件著作权,软著登字第5219522号,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + UltimateFileServer: 支持获取指定目录的所有文件大小,客户端IntegrationFileClient实现相应的调用方法GetTotalFileSize + MqttServer: 支持获取指定目录的所有文件大小,客户端MqttSyncClient实现相应的调用方法GetTotalFileSize + MelsecA3CNet1重命名为MelsecA3CNet,MelsecA3CNet1OverTcp重命名为MelsecA3CNetOverTcp,所有引用这两个类的话无法兼容更新。 + MelsecA3CNet,MelsecA3CNetOverTcp修复和校验bug,支持是否和校验,支持格式1,2,3,4四种通信机制,已经通过单元测试。 + MelsecA3CServer: 新增三菱的A3C虚拟plc,支持是否和校验,格式1,2,3,4,支持和MelsecA3CNet,MelsecA3CNetOverTcp通信测试。 + FanucSeries0i: fanuc机床客户端新增ReadCutterNumber读取当前刀具号的API信息。 + MqttClient: 新增属性UseTimerCheckDropped是否启动定时器检测,其他优化。 + SoftBasic: 新增一个静态辅助方法string GetAsciiStringRender( byte[] content ); 用来获取ASCII显示的,如果遇见不可见字符,则用十六进制替代。 + 官网地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注。 + 本软件已经申请软件著作权,软著登字第5219522号,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + feat(UltimateFileServer): 获取文件服务器的指定目录的大小的方法改为获取大小,文件数量,最后一个文件修改时间的方法,客户端同步更新GetGroupFileInfo。 + feat(MqttServer): 获取文件服务器的指定目录的大小的方法改为获取大小,文件数量,最后一个文件修改时间的方法,客户端同步更新GetGroupFileInfo。 + feat(UltimateFileServer): 新增一个获取指定目录所有子目录的基本信息,包含总大小,文件数量,最后一个文件修改时间,GetSubGroupFileInfos + feat(MqttServer): 文件服务器新增一个获取指定目录所有子目录的基本信息,包含总大小,文件数量,最后一个文件修改时间,GetSubGroupFileInfos + SiemensWebApi: 修复在.net standard2.0及2.1中未添加SiemensWebApi类的bug。 + MelsecA3CNetHelper: 优化数据解析时,对错误异常的处理,增加错误捕获。 + LSisServer: 重写串口Cnet协议的数据接收,处理,和返回,支持了单变量数据,和连续数据的读写操作。 + XGBCnet, XGBCnetOverTcp: 重新实现了类,统一了代码,重新解析的数据内容,支持了对错误码的提取和错误消息的解析。 + memobus: 新增memobus通信协议,初步实现了读取的操作,具体还需要测试,如有网友有测试条件,可以联系我测试。 + Yamatake: 新增山武的数字示波器的CPL协议的通信对象和虚拟服务器,分别是DigitronCPL,DigitronCPLServer + MqttServer, HttpServer: 使用HslMqttApi特性注册远程RPC接口时,支持对异步方法(async...await)进行注册,并进行异步调用,返回相关数据。仅支持NET451及以上。 + HslMqttApi: 在注册RPC接口时,增加了对方法签名的解析过程,客户端可以浏览服务器接口的方法签名,清楚的看到返回类型,参数类型信息。 + Delta: DeltaDvp系列的网口,串口协议,修复在跨区域读写M1536及D4096时,地址偏移不正确的bug。现在会自动跳转。 + MqttServer: 修复Mqtt客户端在取消订阅时,传入多个的Topic时导致服务器解析异常的bug。 + XGBCnet: 支持Read(string[]); 读取多个地址的数据信息,自动按照每16进行拆分访问。 + 官网地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注。 + 本软件已经申请软件著作权,软著登字第5219522号,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + JSON: .NET framework的dll对newtonsoft.Json不依赖特定的版本。 + XGBFastEnet: 修复读取单个的bool时报文不正确的bug. + MqttServer: 新增GetMqttSessionsByTopic方法,用来获取订阅某个主题的所有客户端列表。 + HttpServer: 修复httpserver中文编码问题,在谷歌,微软浏览器下显示中文乱码的bug。因为Content-Type传值不正确 + HttpServer: 修复在账户验证模式下,使用ajax跨域请求OPTIONS导致401错误的bug。 + FujiCommandSettingType: 新增富士的CommandSettingType通信协议的实现,基于TCP访问,支持地址见API文档. + FujiCommandSettingTypeServer: 新增富士的CommandSettingType协议的虚拟PLC,支持B,M,K,D,W9,BD,F,A,WL,W21地址 + 官网地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注。 + 本软件已经申请软件著作权,软著登字第5219522号,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + NetworkAlienClient: DTU(异形)服务器增加对报文的固定头的检查。 + NetworkServerBase: 连接异形DTU(异形)的server的方法ConnectHslAlientClient支持密码输入。 + NetworkDoubleBase: 当设置DTU会话时,修复恰好正在读取导致报文错乱的bug,初始化成功才成功切换DTU。 + McServer: 修复三菱的MC虚拟服务器在ASCII模式下,远程客户端读写B继电器时,地址解析异常的bug。 + LSisServer: 修复LSisServer在客户端读写位时,PX20之类的地址时,写入true不成功的bug。 + TemperatureController: 新增RKC的数字式温度控制器的读写类,地址支持M1,M2,M3,等等 + TemperatureControllerOverTcp: 新增RKC的数字式温度控制器的网口透传读写类,地址支持M1,M2,M3,等等 + 官网地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注。 + 本软件已经申请软件著作权,软著登记号:2020SR0340826,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + NetSoftUpdateServer: 代码优化,新增一个OnlineSessionss属性,用来获取当前正在更新的客户端的数量。 + RSAHelper: 提供了从PEM格式的私钥和公钥创建RSA对象的辅助方法,还提供了RSA对象导出PEM格式的私钥公钥方法。支持加密解密超长数据 + RSACryptoServiceProvider: 增加RSA对象的扩展方法GetPEMPrivateKey及GetPEMPublicKey方便快捷的获取PEM格式的公钥和私钥,扩展加密解密超长数据。 + SerialBase: 串口基类新增虚方法CheckReceiveDataComplete用于检查报文是否接收完成,一旦接收完成,立即返回,增加通信性能。 + ModbusRtu: 重写了CheckReceiveDataComplete方法,根据功能码的不同来判断当前的数据长度是否完整,以此判断报文是否完整。 + ModbusAscii: 重写了CheckReceiveDataComplete方法,根据开头及结尾的固定字符来是否指定值,以此判断报文是否完整。 + ModbusTcpServer: 优化服务器的串口接收功能,现在回复报文很快。1. 先接收串口数据,再Sleep。2. 增加数据完整性校验,一旦成功,立即返回报文。 + ModbusTcpServer: 新增属性RequestDelayTime,设置非0时用来防止有客户端疯狂进行请求而导致服务器的CPU占用率上升问题。 + MelsecA1EServer: 新增MC-A1E协议的虚拟服务器,支持了二进制和ASCII格式,已经配合客户端通过单元测试。 + AesCryptography, DesCryptography: 新增AES及DES加密解密对象,使用密钥实例化即可加密解密操作。 + MQTTServer: 在原有的基础上增加了加密的功能,如果MQTTClient,MQTTSyncClient启用加密功能,那么数据的传输就是加密的,无法抓包破解账户名密码及交互数据。 + AllenBradleyNet: cip协议支持了日期,日期时间的读写操作,这样omron的plc的cip协议也支持了日期时间的读写,在omroncip的demo上添加测试操作。 + 官网地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注。 + 本软件已经申请软件著作权,软著登记号:2020SR0340826,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + SiemensS7Net: 修复读写WString字符串时,乱码的情况。 + NetSoftUpdateServer: 修复在某些情况下在线客户端数量新增后不会减少的bug。 + demo: 字节转换工具界面增加字节数组和base64字符串的转换功能。 + MqttServer: 当MQTTClient在加密模式下,订阅一个主题后,修复服务器仍然返回没有加密的bug,导致客户端解密失败。 + MqttSyncClient: 修复加密模式下,使用SetPersistentConnection设置长连接,不进行ConnectServer直接第一次请求失败的bug。 + AllenBradleyNet: 优化读取bool的功能方法,新增读取bool数组的实现。 + NetworkDataServerBase: 所有串口类的服务器(从机),功能代码优化调整,部分的类实现报文完整性判断,实现数据瞬间回复客户端(主机)。 + Serial: 大量的串口类的设备进行了优化,对接收结果是否结束进行判断,提高了串口通信的性能。 + NetSoftUpdateServer: 新增另一种更新机制,更新软件在收到文件信息后,先比对MD5信息来确定是否下载更新,从而提高升级速度,仍然兼容旧的更新模式。 + NetSoftUpdateServer配套的更新客户端,软件自动更新重新命名为 AutoUpdate, 针对差异化更新做了优化。 + DEMO里面所有的读写PLC界面的读写字符串功能支持了可选编码,支持ASCII,UTF8,UNICODE,UNICODE-BIG,GB2312,ANSI + 其他一些细节的优化,和注释的完善。DEMO界面的大量优化,显示调整,DEMO使用了新的更新软件,AutoUpdate.exe + 官网地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注。 + 本软件已经申请软件著作权,软著登记号:2020SR0340826,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + NetworkDoubleBase: 在异步的网络通信方法中,原来的同步锁会在特殊的情况下导致UI线程卡死,所以改为异步锁,相关继承类也修改。 + HslReflectionHelper: 通过HslDeviceAddressAttribute反射Read,Write的读写自定义对象的功能支持对byte类型的读写操作,需要通信对象本身支持才能成功读写。 + SerialBase: 新增protect级别的AtLeastReceiveLength变量,用来表示从串口中至少接收的字节长度信息,一般为1。 + IReadWriteNet: 新增api支持ReadCustomer( string address, T obj ),允许传入实例对象,对属性进行赋值,方便wpf进行数据绑定操作。 + NetworkWebApiBase: 新增属性UseEncodingISO,在访问某些特殊的API的时候,会发生异常"The character set provided in ContentType is invalid....",这时候本属性设置为true即可。 + Cip: 欧姆龙cip及rockwell的cip支持读取plc型号的方法ReadPlcType(),omron的cip重新设计了WriteTag,对于0xD1类型数据,支持偶数个写入操作。 + SiemensPPI: 修复writebyte方法的api接口名称还未注册的问题, 和串口透传类的相关代码优化,精简。 + MelsecFxSerial: AtLeastReceiveLength变量设置为2,和串口透传类的相关代码优化,精简。 + MqttServer: 新增属性:TopicWildcard,当设置为true时,支持主题订阅通配符,使用#,+来订阅多个主题的功能。具体参考该属性的API文档。 + demo: 修复demo的HTTPClient界面浏览在linux创建的Webapi服务器的api列表功能失败的bug,使用HttpWebRequest来实现。 + demo: rsa加密解密算法测试界面实现签名和验签操作。签名算法可选SHA1,SHA256, SHA512, MD5等等。 + 官网地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注。 + 本软件已经申请软件著作权,软著登记号:2020SR0340826,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + allenbrandlyNet: ExtraOnDisconnect方法增加socket的空检测操作,因为在极少数特殊情况会发生空的异常的bug。 + OmronCipNet: 修复Write数据类型为short[]时长度不是1的bug。同步方法调用Write(string,short[])时会发生写入失败。 + Demo: OmronHostLinkCModeOverTcp的Demo测试界面添加读取型号的功能,可以更加便捷的测试。 + AllenBradleyNet: 重写读取字符串方法ReadString( string address, ushort length ),编码修改为UTF8 + ReverseWordTransform: 字节变换的对象代码优化精简,ReverseWordTransform新增IsInteger16Reverse属性指示short,ushort是否发生翻转,默认翻转。适用极个别特殊的Modbus格式 + YRC1000TcpNet: 安川的机器人的API功能大量添加,支持读取机器人坐标,各种变量信息,启动程序,停止,复位,读报警等待。 + SiemensS7Net: 写入bool数组的方法优化,修改为先读取byte[], 修改中间的位,然后再写回去操作,可以写入一个字节的中间几个位,单元测试通过,仍然有风险,谨慎调用。 + OmronHostLinkCMode: 修复OmronHostLinkCMode读写字节顺序颠倒的问题,新增了读取plc型号,plc状态,修改状态的功能,增加错误码文本解释。 + OmronHostLinkCModeServer: 新增CMode协议对应的虚拟PLC服务器,初步实现了和客户端通信功能,包括串口和网口的支持,单元测试通过。 + 添加在NET2.0,NET3.5及Standard项目缺失的SiemensFetchWriteServer, MelsecA3CServer, MelsecA1EServer, 以及安川的 memobusTcpNet + SiemensS7Net: 在读取单个的bool的值的时候,增加对结果数据的合法性检测,当遇到错误码时,提示错误信息。修复写入bool在某些特殊的情况下,实际成功但是提示失败的bug。 + YRCHighEthernet: 安川机器人添加高速以太网通信,基于UDP实现,在DEMO界面可以直接原生命令测试,支持读取报警,字节,整型,字符串等变量。 + PipeSerial, PipeSocket: 新增串口管道和网口管道,串口基类和网口基类优化重构,允许多个串口设备对象共享一个串口通道,多个网口的设备对象共享一个网口通道。 + ModbusTcpNet:新增属性IsCheckMessageId,用于配置modbustcp协议是否检查设备返回的消息ID是否一致,默认检查,设置为False,也即是不检查ID一致。 + MemobusTcpNet: 安川PLC的memobus协议的修复报文错误的bug,增加了线圈读写,寄存器读写,扩展寄存器的读写功能,例如扩展保持寄存器地址:x=9;100 + Demo:测试界面添加了一个TCP转TCP的界面,可以用于两个网络连接中捕捉通信的数据报文。还有其他的一些细节优化。 + 官网地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注。 + 本软件已经申请软件著作权,软著登记号:2020SR0340826,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + Delta:台达系列的PLC类重命名,新增PLC系列,可选DVP系列和AS系列,相当于新增了对AS300的支持,如果用到,谨慎更新。 + WebSocketServer: 原先订阅的操作使用header来完成,新增客户端从url添加订阅主题,例如:ws://127.0.0.1:1883/HslSubscribes=A,B + AllenBradleyPcccNet:新增AB的CIP协议PCCC格式的通信,测试适用ab1400,地址格式为 N7:5, I:0/2, F2:0 等 + AllenBradleyPcccServer: 新增PCCC的虚拟服务器功能,可以配合客户端进行通信的测试,支持基本的地址。 + MC-A3C: 修复A3C的服务器在格式4的情况下,返回写入操作的控制代码错误的bug,应该为06,写成了02。 + 三菱的A3C协议的读取字数据及位数据长度自动切割,可以输入理论最大长度,修复校验是否写入成功确提示失败的bug。 + NetworkDataServerBase:串口接收增加最小接收时间,默认是20,表示20毫秒,如果重写了报文结束检查,则可以设置大一点。 + NetworkServerBase: 基础服务器对象新增属性EnableIPv6,当设置为true的时候,则使用IPv6协议进行数据通信和访问。 + 所有的TCP及UDP的相关的客户端通信类的 IP 地址设置,都支持了 IPv6 地址,所以目前IP地址支持 IPv4 和 IPv6 及 网址。 + Demo:fanuc机器人的测试界面写入数据操作进行提示相关的确认,防止手抖不小心写入导致机器人运行不正常。 + Demo,所有的设备通信类,新增一个支持的设备列表功能,大家可以手动添加支持的列表,方便别人查看支持的型号,请大家务必真实填写。 + 官网地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注。 + 本软件已经申请软件著作权,软著登记号:2020SR0340826,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + Delta: 台达的DVP系列,当地址带站号时,并且出现了跨地址切割时,修复站号丢失的bug。跨地址指跨越M1536,D4096地址。 + Delta: 台达AS系列的地址 SR 地址支持输入 SR0 以及 sr0 + 针对FinsTcp协议及ADS协议的剩余字节解析,本来是int类型,现在加了最大长度10000的限制,防止异常攻击时导致申请内存过大而奔溃。 + Inovance: 汇川相关的PLC的数据排列规则调整为 CDAB,DEMO上的选择也默认改为这个。 + MelsecFxSerial: 移除三菱编程口协议最小接收回复报文2字节的限制,实际测试有时候只需要一个字节就可以了,否则会一直处于接收超时。 + ByteTransform: TransBool的方法的偏移和长度均修改为以位为单位,具体调用API时查看注释说明,长度为10就表示10个长度的bool。 + AllenBradleySLCNet,AllenBradleyPcccNet: 地址支持ST10:2这种字符串地址,并在AllenBradleyPcccNet上实现动态读取字符串,长度为0或没有,则自动长度。 + AllenBradleySLCNet,AllenBradleyPcccNet: 以及SLC的协议地址支持了 L17:0 的地址,长整型类型 + VigorSerial,VigorSerialOverTcp: 新增丰炜PLC的编程口协议及透传类,支持VS系列,地址支持动态站号信息,例如 s=2;D100 + VigorServer: 新增丰炜的虚拟PLC,模拟了VS系列的通信,可以和对应的客户端进行数据读写测试,位地址支持 X,Y,M,S,字地址支持 D,R,SD + MelsecFxSerial: 三菱的编程口协议及其透传类添加一个激活PLC的API方法ActivePlc,在某些特殊的PLC读写数据之前,需要先调用一下。 + Modbus:Modbus所有协议的ReadFromCoreServe(byte[])增加特别的注释,只需要传递modbus核心报文即可,不管tcp,还是rtu,还是ascii,都是一样的。 + 官网地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注。 + 本软件已经申请软件著作权,软著登记号:2020SR0340826,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + NetworkBase: 新增Receive原始字节数据时,也就是申请byte[]缓存时,对可能存在的异常捕获操作,返回失败的结果对象。 + AllenBradleyPcccNet: 修复对于ReadAsync也注册了API接口,导致重复注册的bug。 + WebSocketClient: 修复因为掉线重连服务器的时候,重新携带订阅的主题。 + 官网地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注。 + 本软件已经申请软件著作权,软著登记号:2020SR0340826,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + SerialBase: SetPipSerial重,命名为SetPipeSerial,如果有使用串口管道,则需要更改相关的名称。 + MelsecMcDataType: 修复三菱累计定时器当前的值的地址进制转换应该为10进制,结果写成100导致转换失败的bug。 + Keyence: 上位链路协议的串口及网口的通信类,ByteTransform的IsStringReverseByteWord调整为true,读写字符串时将两两颠倒。 + IByteTransform: 转换接口类的注释进行完善,提示更加详细完整,中英文并行提示。 + Vigor: 丰炜PLC的读取位和读取字的功能方法,对读取长度进行内置切割,相当于支持了无限长度的数据读取。 + EstunTcpNet: 新增埃斯顿机器人通信类,内置定时器保持心跳,支持读取机器人的基本信息,详细见DEMO界面。 + FanucInterfaceNet: 修复fanuc机器人的中文编码异常的bug,使用标准的GB编码解析,如果编码获取异常,需要自行nuget安装System.Text.Encoding.CodePages组件,并注册编码。 + Device: 设备类增加ReadStruct{T}方法,根据特性从原始字节里解析出实际的数据对象。影响范围所有的设备类对象。 + Demo: Demo程序支持了手动设置版本更新忽略提醒,忽略之后再菜单栏进行提示新版,以及增加添加激活操作功能,本地保存加密的激活码。 + 官网地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注。 + 本软件已经申请软件著作权,软著登记号:2020SR0340826,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + ABBWebApiClient: GetRobotTarget方法,返回的数据信息,增加q4数据信息。 + Modbus: 在modbus的派生类协议中,重写了modbus的地址转换的情况中,修复读写bool操作,因为地址中带小数点导致地址转换异常的bug。例如汇川AM系列读写QX3000.0 的bool值 + MelsecFxSerialHelper: 三菱编程口协议的检查和校验的方法,增加try...catch,在某些特殊的情况下,会导致异常,直接奔溃。 + NetSoftUpdateServer: 针对之前旧版的软件升级功能,增加30分钟的超时时间限制,如果30分钟后仍然没有更新完成,则自动移除会话。 + SiemensS7: S7的地址支持大小写,且都支持带X,B,D,W的地址,比如MD100, MW100, MX100.2 + OmronConnectedCipNet: 注册报文里的不通信超时修改为42分钟,读取short,及ushort数组时,按照994长度进行切割 + AllenBradleyPcccNet: 支持使用0F-AB的掩码写入功能,写入一个bool值到PLC中,PCCC虚拟服务器实现了这个AB功能码,可以虚拟测试。 + FanucInterfaceNet: 修复demo上读取WO数据时,地址偏移不正确的bug。 + Freedom: 串口,网口的自由通信协议增加委托CheckResponseStatus,可以自定义对报文结果进行校验,完善注释。 + DLT645: 优化数据接收部分的代码,如果数据完整,立即返回,数据前面兼容无用的字符数据。 + INetMessage: 消息类新增方法PependedUselesByteLength( byte[] headByte )并在DLT645OverTcp消息类重写,支持前置无效的字符。 + AllenBradleyNet:支持添加消息路由功能,默认不开启,实例化属性MessageRouter, 例如:1.15.2.18.1.1,支持在demo界面进行配置操作。 + AllenBradleyNet: 支持遍历全局变量和局部变量。新增StructTagEnumerator( AbTagItem structTag )方法遍历结构体的成员变量信息。 + Demo:AllenBradleyNet节点浏览的界面支持了查找数据,显示数据,结构体嵌套遍历,还支持显示当前的数据信息。 + ModbusTcpServer的RTU接收时间调整为500ms,如果报文完整立即接收结束。 + 本版本可能是春节前的最后一个版本了,提前祝大家新春快乐。 + 官网地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注。 + 本软件已经申请软件著作权,软著登记号:2020SR0340826,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + AllenBradleyNet: Write( string address, bool value )写入bool方法优化,如果是类型代号0xD3的,地址前面需要增加 "i=" 标记。 + PanasonicMewtocolServer: 松下虚拟PLC地址类型支持完善线圈支持X,Y,R,L, 字单位的整型支持 X,Y,R,L,D,LD,F,支持RCP及WCP指令离散读写线圈。 + PanasonicMewtocol:松下协议及其网口类的代码优化提炼共同代码,新增加离散bool地址的读写,传入多个地址,返回一个bool数组。 + AsciiControl: 在命名空间slCommunication.Core下面增加一个AsciiControl类,包含控制类ASCII常量定义,例如ENQ,NAK,STX,ETX等。 + MelsecFxLinksServer: 新增三菱的FxLinks计算机链接协议的虚拟PLC,支持串口和网口透传访问,支持格式1,4切换,支持是否和校验。 + MelsecFxLinks: 1. 同时支持了格式1,格式4,2. 支持了地址大于10000的时候使用QR,QW命令,3. 修复报文创建时数据长度及站号不是16进制的bug。 + KeyenceNanoServer: 修复启动串口时,和上位链路客户端通信时,一直返回通信校验错误的bug,现在针对CC指令和CQ指令都能正确的返回。 + keyenceNano: 基恩士上位链路协议的串口类和网口透传类记录报文的格式调整为ASCII码,这样更加直观。 + NetworDataServerBase: 添加GetNewNetMessage( )及ReadFromCoreServer方法,精简所有继承的子类虚拟PLC的服务器的代码。 + MelsecA1EServer: 修复三菱A1E协议服务器报文接收异常的bug,导致客户端读写数据不正常。 + FatekPrograme: 永宏编程口协议读取字按照64字长度自动切割,支持了RUN,STOP,读取状态接口方法,新增对应的虚拟服务器实现。 + SpecifiedCharacterMessage: 新增基于指定字符结尾的消息类,通过ProtocolHeadBytesLength属性变种而来,NetworkBase的ReceiveByMessage功能适配了SpecifiedCharacterMessage消息。 + Turck: 新增图尔克的Reader协议实现,支持对字节读写,bool读写,实现了虚拟服务器,通过了单元测试,主要用来和RFID进行通信。 + IEC104: 初步添加IEC104协议实现和解析,增加demo测试,但是目前还清楚怎么设计API和使用场景,等待继续优化,欢迎相关需求的人联系测试优化。 + DEMO: RSA加密解密的测试界面,支持对超长的数据进行加密解密操作。 + 官网地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注。 + 本软件已经申请软件著作权,软著登记号:2020SR0340826,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + ModbusHelper: 修复ReadBoolHelper在Modbus继承类里进行了自定义地址转换,导致读字地址的位失败,例如汇川AM系列读取M240.1的bool数据失败 + LSisServer: 修复基于Cnet串口协议的通讯时,客户端使用SB连续读取指令读取长度大于9时,服务器对长度解析失败导致读取失败的bug。 + GroupFileContainer: 新增获取所有文件的下载次数总和的属性,名称为:TotalDownloadTimes。 + SerialPort: 新增串口的扩展方法IniSerialByFormatString,支持格式化的初始串口信息,例如 COM3-9600-8-N-1,简单明了。ModbusServer界面支持串口参数配置,支持配置最短接收时间配置。 + MelsecFxLinksServer: 三菱Fxlinks虚拟服务器,修复远程客户端在读取位地址(例如M100)的字数据时,返回错误失败的bug。 + HslReflectionHelper: MRPC及Webapi注册的方法接口功能中,支持参数类型为自定义类型数组的参数,例如Student[],不支持List{Student}。 + MqttServer: 文件读写功能的引擎中,遍历所有子目录统计信息时,可选参数是否携带返回最新的一个文件的信息,客户端做了相关的适配,参数支持。 + XGBFastEnet: 修复向PLC读取数据到时候,类型指定不正确的bug,之前无论是什么类型,都会设置为0,PLC从而值返回一个字节长度的数据。 + Mewtocol: 松下Mewtocol协议,当读写字单位超出协议限制时,自动升级为扩展协议标识,标记字符为 < (小于号), 服务器读写长度根据实际限制,支持扩展协议标识。 + FanucSeries0i: 修复fanuc机床类读取虚拟机床系统时,显示运行时间为负数的bug。 + NetworkDoubleBase: 新增受保护的属性UseServerActivePush,只要设置为True,就可以将当前的连接切换为既支持设备主动发送,又支持同步访问的客户端,使用信号同步器来支持问答通信。 + SiemensPPIServer: 新增PPI Server类,支持TCP以及串口的通讯,PPI的串口和网口透传类客户端增加读取PLC类型的功能方法。 + SiemensS7Server: 修复客户端读取数据时,返回客户端FF04的数据内容时,位长度信息赋值不正确的bug,这会导致某些客户端发生数据异常。 + SiemensPPI: 西门子PPI协议优化,读取bool[]的功能方法调整为先读取字,再解析出位数据信息,以此来支持批量读取位。 + XinJETcpNet: 信捷的modbustcp协议新增当某些地址超过临界范围时,自动升级modbus协议到信捷内部TCP协议,以此访问到更大范围的数据内容,并支持了临界地址的跨地址访问,自动切割重组。 + XinJEInternalNet: 新增完全的信捷内部协议实现的TCP通信,可以读取更大范围的数据内容,比如D200000地址,支持的地址参考API文档。 + DeltaDvp: 修复台达系列在进行读取D寄存器的位的时候,也即是时 ReadBool("D100.1") 方法时,地址无法识别的bug,现在可以正确的读到D100的位信息。 + FanucSeries0i: 新增WriteRData的接口方法,新增读写PMC数据的方法,ReadPMCData及WritePMCData,与R数据的读写类似,都是字节操作的方法。 + IReadWriteDevice: 扩充方法支持,支持ReadFromCoreServer(List{byte[]})的读取的方法支持,支持多个报文读取,结果打包返回。 + BeckhoffAdsNet: 倍福通信类新增是否使用自动AMS属性,默认为false,设置为true时,网络初始化时从server端加载相关的NETID参数信息,目前在twincat3上成功测试。 + BeckhoffAdsNet: 修复ReadBool数组时,返回的长度都是8的倍数的bug。属性UseServerActivePush调整为True,支持PLC方主动推送数据信息。 + BeckhoffAdsNet: 修改读取bool时地址机制,地址支持小数点,例如M100.2 ,所以M800等于M100.0, 修复读取数组时值解析不正确的bug, 修复写入bool数组失败的bug。 + BeckhoffAdsNet: 修复直接SetPersistentConnection设置长连接无法读取的bug,以及掉线后,继续读写一直失败的bug。 + BeckhoffAdsNet: 修复倍福服务器重启后继续读写标签变量一直失败的bug,原因来自倍福重启导致标签内存地址变更,但是缓存还是一直使用旧的。 + SecsHsms: 新增secs协议的hsms实现,初步实现了主动方,也即是客户端,支持了一个通用的接口和数据,ReadSecsMessage方法。 + 官网地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注。 + 本软件已经申请软件著作权,软著登记号:2020SR0340826,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + MelsecMcRNet: 修复McType属性设置不正确的bug,导致依然使用普通的mc协议来进行通信,因为R系列MC协议地址不一样。 + ModbusServer: ModbusServer增加属性StationCheck,默认为True,对请求的客户端的站号进行检查操作,也可以设置false,不检查站号一致。 + BeckhoffAdsNet: 新增支持批量读取的方法Read( string[] address, ushort[] length ),完善了API文档说明,可以一次性读取多个标签信息,需要自行解析。 + BeckhoffAdsNet: 修改默认的端口为851,主要用于TWINCAT3,当没有设置 NETID 时,直接连接PLC的话,自动升级为自动获取NETID信息。 + BeckhoffAdsNet: 重写实现新的Read{T}(), 一次性读取所有的类型数据,然后自动解析赋值到对象的属性,在API文档上增加示例的代码。 + SiemensPPI: 西门子PPI协议修复输入M5这种只有两个字符的地址的时候,地址解析报异常的bug,同样也适用于SiemensPPIOverTcp + KeyenceNano: 基恩士上位链路协议优化,地址重新设计,修复B,VB,W的十六进制地址解析异常的bug,FM地址不正确解析的bug。 + KeyenceNano: 上位链路协议读取支持自动切割,根据不同的地址切割出不同的长度信息,一般都是256长度切割,虚拟服务器也进行了地址修复和长度限制适配。 + OmronFinsUdp: 欧姆龙Finsudp协议的DA1(PLC节点号)调整为0x00,自动获取,在demo测试界面,增加GCT和SID的参数设置,一般默认就好。 + FanucSeries0i: 读取R数据的接口重新设计,修改为ReadPMCData,地址支持G,F,Y,X,A,R,T,K,C,D,E 例如R1200,写入也是一样,具体看demo演示。 + 官网地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注。 + 本软件已经申请软件著作权,软著登记号:2020SR0340826,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + TcpForward: 新增TCP转TCP的类,设置本地端口及远程端口,客户端连接之后立即连接远程服务器,进行数据转发,支持多个连接,每个客户端都创建一个远程连接对象,DEMO的转发测试使用这个类。 + BeckhoffAdsServer: 倍福的虚拟PLC修复M100.1位地址读写数据不正确的bug,支持了符号地址,支持创建符号数据,自动生成唯一的句柄地址。支持客户端批量的地址读取,也即功能码为 0xF080。 + AllenBradleyPcccServer: 修复PCCC虚拟PLC读写地址数据解析异常的bug,导致和客户端的地址数据不一致。提炼优化地址信息。 + NetworkDataServerBase: 优化串口接收时候的数据检测的代码,修复modbus虚拟服务器接收串口数据时,功能码为0x10时,SerialReceiveAtleastTime属性设置无效的bug。 + XinJE: 基于modbus协议的信捷类对象,当地址是位地址时(X,Y,M等),支持了当使用Read(字单位)读取原始字节的方法,返回原始的字节信息。 + FanucSeries0i: Fanuc数控机床通信类,新增读取机床型号信息的api,ReadSysInfo,信息在连接初始时获取生成,后续直接读取内存。 + FanucSeries0i: 读取程序文件及下载程序到机床支持路径参数,例如操作PATH2时只需要输入 //CNC_MEM/USER/PATH2/ 即可,新增DeleteFile的API用于删除任意路径的程序文件。 + FanucSeries0i: 新增ReadAllDirectoryAndFile方法,用来遍历指定路径下的所有的子路径和文件的信息,文件大小使用字节为单位。 + ISessionContext: 在MRPC的接口及HttpWebapi注册接口的方法里,参数ISessionContext新增Tag对象,方便自定义捆绑一些数据信息。 + MqttServer: 文件服务器相关的功能增加GetGroupFromFilePath方法,从路径信息里获取到文件列表管理容器,进而可以获取单个文件的对象,在权限控制时可以更加的细致。 + Modbus: ModbusHelper针对modbus-rtu的返回接收报文检测,增加对站号一致性的检测,如果发现站号不一样,返回错误信息。 + ICryptography: 添加直接对字符串进行加密解密的方法,并在AesCryptography类和DesCryptography实现方法,方便直接操作。 + OmronConnectedCipNet: 优化批量读取数组的方法,自动根据类型来切割不同的读取长度,分批次读取所有的数据信息。修复握手报文丢失Timeout时间报文的bug,导致v10.5.0以来不能读取的问题 + OmronConnectedCipNet: 优化和PLC持续几秒钟不读写就被PLC强制断线的问题,现在支持很长的时间,修复关闭立即重连(包括意外断线重连)连接不成功,一直报错重复打开会话的异常。 + NetworkConnectedCip: 基于连接的CIP协议里,在OpenForward初始化里,自动获取连接ID,如果失败,并尝试五次自增连接ID重新Open。 + AllenBradleyConnectedCipNet: 新增ab的connected cip协议的实现,继承自欧姆龙的connected cip协议,重写了部分的逻辑实现,缩小了单次读取的字节上限,初步测试通过。 + NetworkServerBase,NetworkDoubleBase: 新增属性SocketKeepAliveTime,用来设置底层的socket的KeepAlive信号,单位毫秒,默认不开启,开启后将会自动间隔的发送KeepAlive信号。 + AllenBradleyServer: cip的虚拟服务器同时支持了基于连接的CIP的访问。标签定义类AllenBradleyItemValue新增TypeCode属性,在返回客户端数据的时候,带类型数据返回。支持bool[]节点创建 + SoftBasic: GetAsciiStringRender 不可见字符判断除了0x20以下,追加0x7e以上的字符。新增GetFromAsciiStringRender方法,把GetAsciiStringRender 结果反向转换回来。 + AllenBradleyNet: 支持写入bool[]功能,支持写入byte[]数组功能(类型代号默认为0xD1),WriteTag方法支持地址携带类型信息,例如地址 type=0xD1;A[0] + MelsecFxSerial: 三菱的编程口协议在新版协议配置为True时,修复D8000地址以上读写不正确的bug,修复X,Y,M,S部分地址读写不正确的bug,都调整为新版的报文,支持的范围更大更准确。 + MelsecFxSerialOverTcp: 新增加通过GOT连接的方式,。PanasonicMewtocol: 松下的Mewtocol协议支持了经过值及目标值。ILogNet: 日志的接口新增属性LogThreadID,用来配置是否记录线程ID的数据信息。 + SecsHsmsServer: 新增Secs协议的虚拟服务器,支持事件自定义处理所有的消息。并添加示例的代码。Demo程序界面。 + Mqtt: MqttClient及MqttServer支持了遗言消息,客户端A在连接参数里设置了遗言主题及数据,当客户端A非正常掉线的时候,服务器即发布该遗言主题信息。 + MqttSyncClient: 新增HslCancelToken对象,在文件上传和下载的过程中支持取消操作,MqttServer适配相应的功能实现,取消示例代码增加。 + HttpServer: 新增Action对象DealWithHttpListenerRequest,用来处理定义的Header数据到Session会话中,实现更加复杂自定义的操作。 + Demo: DEMO写入各种PLC的数据功能里,写入的数据支持byte数组,例如数据输入[1,2,3], 点击写入byte,就自动写入new byte[]{ 0x01, 0x02, 0x03}; + Demo: TCP调试界面优化,新增握手报文设置。新增一个测试正则表达式的界面,增加一些常用的正则表达式的内容。CIP浏览节点界面支持正则表达式筛选节点。 + 官网地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注。 + 本软件已经申请软件著作权,软著登记号:2020SR0340826,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + HslExtension: 新增了一些扩展方法,现在可以直接从short,int类型获取位及设置位的功能,例如 bool value = shortValue.GetBoolByIndex(10); 设置位也是同理。 + DLT645: Demo界面优化,无论是串口的,还是网口的,都支持了密码及操作者ID的输入。修复了站号输入后,但是站号初始化不成功的bug。 + LogStatisticsBase: 当传入的长度为-1时,表示不限制长度信息,会一直的新增。 + Upgrade.exe: 用于自动升级更新的项目重新优化,支持了下载时候的网速显示,支持了下载百分比显示,删除了自动创建快捷方式的代码。 + SerialBase: 初始化串口的方法SerialPortInni( string portName )支持格式化的输入,例如COM3-9600-8-N-1,COM5-19200-7-E-2。 + MelsecFxSerialOverTcp: 当启动GOT透传时,修复报文封装不正确导致写入失败,读写值不正常的bug。 + InovanceHelper): 汇川的PLC针对M地址的寄存器,支持使用 MX0.0 来对位进行读取操作。支持了MB100读取byte类型的数据。 + Demo: 在Demo所有的设备通信测试界面,几乎所有的设备都支持了显示报文信息,想要查看通信的报文协议,菜单里点击 报文日志 。 + 官网地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注。 + 本软件已经申请软件著作权,软著登记号:2020SR0340826,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + LogNet: 修复日志对象在配置了LogThreadID=False时,控制台输出界面仍然显示线程号信息的bug。 + AllenBradleyServer: 新增属性CreateTagWithWrite,当手动设置为true时,从服务器端写入不存在的标签将根据写入的类型自动创建标签。 + NetworkUdpBase: udp的通信基类修复某些设备通信情况下每9次通信就会跟随一次失败的bug,原因来自不停的创建socket,现在修改为连接正常就不重新创建socket + AllenBradleyServer: ab虚拟plc修复写入short的类型分配不正确的bug,并且增加一个创建byte字节数组的标签的方法接口。 + AllenBradleyNet: 修复同步方法ReadString(string address); 读取字符串返回数据乱码的bug,原因来自调用了基类的字符串解析。 + DLT645: 大面积优化,支持了更多的地址读取,支持了一个地址多个数据读取,修复了部分数据(如电流,功率因数等)不识别正负号的bug。 + PipeSocket: 端口号信息由int型调整为数组,使用SetMultiPorts方法可以设置多个端口号信息,当PLC对象重连时,就会切换端口号,循环反复使用指定的端口号信息。 + PipeSocket: 多端口号使用方法为 plc.GetPipeSocket( ).SetMultiPorts( new int[] {6000, 6001} ); 实例化之后调用一次即可。 + 官网地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注。 + 本软件已经申请软件著作权,软著登记号:2020SR0340826,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + MelsecFxSerialOverTcp: 修复在启用GOT透传时,碰到特殊的报文解析异常,最终导致偶尔读写失败的bug。 + InovanceHelper: 修复汇川PLC的AM系列时,读写M区域位地址的数据偏移不正确的bug,例如MX100.0,实际地址应该是MW50的第0位。 + ModbusTcpServer: 新增属性StationDataIsolation,默认为false,表示server只有一个数据区,所有站号用的一个数据区。如果设置为 true,表示server给每个站号开辟一个数据区。 + ModbusTcpServer: 修改Station站号类型为byte,删除属性StationCheck,现在不需要检查站号了。服务器侧读写数据支持了输入站号信息,例如 s=2;100,可以访问不同站号的数据。 + FujiSPBServer: 修复富士SPB虚拟服务器再读写位数据的时候,修复地址偏移解析异常导致bug。 + AllenBradleyServer: CIP协议的虚拟服务器修复当客户端写入bool变量时,无论写入True还是False,服务器都写入True的bug。 + MelsecFxSerialOverTcp: 三菱的编程口协议里,读取的地址长度突破了254字节的长度限制,现在可以读取无限个bool值,或是其他类型的值。 + HslReflectionHelper: 在MRPC及webapi接口的参数数据提取过程中,支持传入JSON对象及JSON对象的字符串,都会自动解析成正确的对象值或是JObject值。 + MelsecA1ENet: 三菱的A1E协议,读取字及位数据时,支持了读取超过64地址长度的数据,内部自动切割重组。 + DLT698: 初步添加DLT698.45的协议实现,使用明文的通信方式。支持读取功率,总功,电压,电流,频率,功率因数等数据。 + XGBCnet: Lsis的XGBCnet协议修复部分的bool读写位置和真实PLC对应不上的bug,bool的读取支持了MW100.2 带小数点表示的方式。 + XGBCnet: 支持了批量的bool数组读取功能(内部自动读取字节,解析出bool数组,不支持写入bool数组)。修复XGBFastEnet在配置XGB型号时读写数据异常的bug。 + 官网地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注,新官网:http://www.hsltechnology.cn/。 + 本软件已经申请软件著作权,软著登记号:2020SR0340826,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + NET451: 紧急修复NET451项目因为代码合并时导致签名丢失的问题,否则将导致签名的应用程序无法编译。 + DLT698OverTcp: 新增DLT698的串口透传类,使用串口转网口即可进行通信。 + DLT698TcpNet: 新增基于网口的DLT698协议,存在握手包,还未详细测试。 + 官网地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注,新官网:http://www.hsltechnology.cn/。 + 本软件已经申请软件著作权,软著登记号:2020SR0340826,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + ModbusAsciiOverTcp: 新增modbusascii协议的串口转网口透传的通信类。 + DeltaSerialAsciiOverTcp: 新增一个台达的ASCII通信协议的串口转网口透传通信类,和其他的基于modbus的台达类一致的用法,一致的地址格式。 + FujiCommandSettingType: 修复FujiCommandSettingType及其虚拟服务器再解析地址不正确的bug,导致大量的其他地址解析失败,并完善了注释说明。 + MelsecFxSerial: 新增属性AutoChangeBaudRate,默认false,当设置为true时,在串口打开时会和PLC交互改变PLC默认的波特率。 + SerialBase: 新增串口类基类属性ReceiveEmptyDataCount,用来表示接收空白数据次数,然后判断接收完成的标记,单次耗费的时间是 SleepTime。 + Modbus: DEMO相关的界面都默认的DataFormat都调整为 CDAB,因为大多数的设备数据大小端都是这个格式。 + OmronConnectedCipNet: 新增IReadWriteCip接口,欧姆龙的基于连接的CIP协议实现了日期及时间的读写接口。 + MqttServer: MQTT服务器支持向自定义规则的客户端会话发布指定的主题数据,详细查看PublishTopicPayload重载方法 + MqttSyncClient: 上传文件到服务器的功能接口里新增流数据的上传,需要指定服务器保存的文件的名称。 + NetworkConnectedCip: 基于连接的CIP协议的连接id信息初始化时及赋予一个随机数,增加一个新的错误描述信息,连接过多的错误。 + Upgrade.exe: 用于更新的exe修复当文件长度为0时,导致百分比计算异常的bug。 + OmronFinsAddress: 欧姆龙FINS协议的地址,增加支持了定时器TIM,计数器CNT,索引寄存器IR,数据寄存器DR的读写。 + 官网地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注,新官网:http://www.hsltechnology.cn/。 + 本软件已经申请软件著作权,软著登记号:2020SR0340826,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + TcpForward: TCP转TCP类新增OnRemoteMessageReceived及OnClientMessageReceive事件,可以捕获所有的通信报文。 + TcpForward: TCP转TCP的对象新增ConnectTimeOut属性,支持设定连接超时 + NetSoftUpdateServer: 更新的服务器新增一个方法,GetDealSizeAndReset每秒调用即可获取当前的下载网速信息 + AllenBradleyNet: 完善了路由信息,支持了一种特殊的路由信息的消息,格式为 1.1.2.130.133.139.61.1.0。 + TcpFoward: TCP转发的类新增一个属性OnlineSessionsCount,获取当前在线会客户端会话数量信息。 + SecsHsms: 新增属性 InitializationS0F0,默认为false,指示是否在初始化的时候,发送功能码 S0F0。 + Lognet: 优化日志存储器在计算过期日志文件并删除的代码,现在触发新增文件时,才进行删除旧的文件信息。 + 官网地址: http://www.hslcommunication.cn 官网的界面全新设计过,感谢浏览关注,新官网:http://www.hsltechnology.cn/。 + 本软件已经申请软件著作权,软著登记号:2020SR0340826,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + SiemensS7Net: 新增ReadDate,WriteDate的功能方法,实现了对日期类型的变量的读写操作,PLC测标记为D#2022-8-19 + SecsHsms: 客户端和服务器的程序,都支持了字符串编码属性设置,可以支持其他的编码,默认的编码调整为Default,主要是支持了中文的消息。 + FanucInterfaceNet: fanuc机器人的地址支持了直接的地址,Bool地址支持:SDO, SDI, RDI, RDO, UI, UO, SI, SO ,字单位地址支持:GI, GO, D。修复日志重复记录。 + OmronFinsNet: OmronFinsNet,OmronFinsUdp, OmronHostLink, OmronHostLinkOverTcp支持0104功能码,批量读取随机字地址,使用方法 Read(string[]) + OmronFinsServer: fins虚拟服务器支持了0104随机读取地址的功能码,对代码进行了优化,提炼了重复的代码。 + MqttRpcDevice: 新增基于MQTT-RPC接口的设备对象,用来访问使用MQTTServer注册plc对象为RPC接口的设备,让单连接的PLC瞬间支持N连接,参考:https://www.cnblogs.com/dathlin/p/16632767.html + Toledo: 托利多电子秤增加通信报文日志记录,支持了扩展模式下的输出格式,并对数据分析增加异常捕获,日志记录。优化串口的通信接收,增加是否配置和校验的属性。 + MqttClient: 每个订阅的主题升级为SubscribeTopic类对象,携带一个事件,支持每个主题绑定不同的事件内容。方便子窗体使用同一个MqttClient对象订阅不同的主题并触发不同的事件。 + SiemensS7Server: 优化字符串的读写操作,支持WString字符串的读写,自动使用S7格式的字符串,在demo写入字符串数据的时候,客户端也可以正确的读取。 + ILogNet: ILogNet日志接口新增一个属性LogStxAsciiCode用来配置是否在每条日志开头记录0x02的ASCII码字符,默认为true,设置false后也就无法使用hsl自带的日志分析工具。 + RedisClient: redis客户端类支持了集群的服务器情况,当标签A在另一个服务器时,redisclient会自动连接到对应的服务器进行获取。 + FanucSeries0i: fanuc机床的通信类支持了ReadOperatorMessage方法,用来读取机床的操作信息。 + MqttServer: 修复Mqtt服务器在进行订阅结果反馈时,没有将topic主题的Qos也返回的bug,在某些情况下,客户端会引发异常。 + NetworkDataServerBase: 新增加属性ForceSerialReceiveOnce,默认为false,当多个modbusserver使用485总线串到一起时,需要设置为true + Iec104: 修复连接失败的bug,修复在I帧消息号返回接收的id信息数量不正确的bug,现在可以正确的接收设备的数据。 + Demo界面新增一个各种校验码测试的界面,主要用于测试CRC16,LRC,FCS(异或校验),ACC(和校验),欧姆龙的Fins协议Demo界面上支持配置字符串是否翻转。 + Json: 依赖的json组件 Newtonsoft.Json 更新到最新的 v13.0.1 版本。 + 新官网:http://www.hsltechnology.cn/,还有全新的使用文档的地址:http://www.hsltechnology.cn/Doc/HslCommunication + 本软件已经申请软件著作权,软著登记号:2020SR0340826,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + Demo: 修复山武设备串口通讯调试界面,站号设置无效的bug。 + MelsecMcServer: MC协议的虚拟服务器支持L寄存器的读写操作,原先的D寄存器范围为 D0~D65535 扩展到 D0~D131071 + MqttSession: Mqtt会话新增属性DeveloperPermissions,标记开发者权限,服务器可以自由控制会话是否具有遍历MRPC接口的权限。 + DLT: DLT645及DLT698协议及其网口透传类新增属性:EnableCodeFE, 莫认false,当设置为True时每次发报文到设备时都会追加FEFEFEFE的指令头。 + OmronConnectedCipNet: 新增属性ConnectionTimeoutMultiplier用来设置异常超时时间,默认02表示32秒。 + SiemensS7Server: 优化握手报文的数据信息,现在支持了node-red的s7功能节点的读写数据,支持了s7netplus组件的连接及读写。 + SoftBasic: 新增从XML元素获取泛型值的便捷方法,DEMO程序的一些界面优化,串口调试界面优化,webapi服务器接口界面支持接口存储。 + OmronFinsTcp: FinsTcp协议优化,在接收fins消息报文时,即使前面有多个无用字节数据,依然可以正确的接收并处理数据。 + SiemensS7Server: 西门子的s7虚拟服务器的DB块优化,采用词典存储,内置DB1,2,3,其他DB块需要使用AddDbBlock方法来手动增加,否则无法读写。 + YokogawaLinkServer: 修复横河PLC虚拟服务器的读取bool数据时,无论输入什么地址类型,都会读取m寄存器的bug。 + HslExtension: ToHexString 的扩展方法以及SoftBasic.ByteToHexString 方法在转换byte[]到string时,支持格式化的参数,默认 {0:X2} + SerialBase: 修复在特殊情况下读取数据导致没有响应,也不触发超时的bug,优化modbusrtu在错误码报文下的接收完成判断。 + MemobusTcpNet: 安川PLC修复读写扩展寄存器失败的bug,通信细节进行优化,支持对扩展寄存器的随机字读取和写入操作。并增加MemobusUdpNet类,基于UDP的实现。 + MemobusTcpServer: 新增加安川PLC的虚拟服务器实现,支持功能码为 01 02 03 04 05 06 08 09 0A 0B 0D 0E 0F 10 + 新官网:http://www.hsltechnology.cn/,还有全新的使用文档的地址:http://www.hsltechnology.cn/Doc/HslCommunication + 本软件已经申请软件著作权,软著登记号:2020SR0340826,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + SoftBasic: 新增对url字符串编码和解码的方法,UrlEncode及UrlDecode方法,主要是中文和%开头的互转,代码参考微软实现。例如 AB好 和 AB%E5%A5%BD 互转 + HttpServer: 新增委托HandleFileUpload,当客户端上传文件时触发,然后获取到文件名和内容,可以自己进行存储,目前仅支持单个文件上传。 + DLT645-2007: 网口串口代码优化,相同的逻辑代码提炼,并增加属性 DLTType,返回枚举:DLT645Type.DLT2007 + DLT645With1997: 新增 DLT645/1997 协议的实现,使用ReadDouble来读取相关的数据,例如地址:B6-11 读取电压A数据。 + DLT645With1997OverTcp: 新增 DLT645/1997 网口透传实现的版本,使用TCP/IP通信并数据交互,使用方法和 DLT645With1997 一致。 + SiemensPPI: 优化西门子PPI协议数据接收时完整性判断,数据一旦接收完成,立即返回。因为在某些特殊情况下,数据接收不完整时会发生异常。 + SiemensPPIOverTcp: 接收数据时循环接收,并判断数据完整性,数据一旦接收完成,立即返回,增加循环超时时间,为ReceiveTimeout。 + CJT188: 新增CJT188-2004的水表(燃气表)协议,使用ReadDouble 和 ReadStringArray通信,地址示例:90-1F读取当前的累积流量,同时添加网口透传的版本。 + FanucSeries0i: fanuc的机床新增属性OperatePath,默认为1,当机床为多路径的时候,可以设置为2,然后对路径2进行相关的操作,例如读取报警,读取程序。 + MqttServer: 优化安全性,当没有指定RSA密钥时,针对每个连接的客户端对象,都创建随机的RSA密钥,来提升安全性。 + ILogNet: 日志类接口新增属性HourDeviation,如果需要日志记录时进行时间偏移操作,可以设置该属性实现,如果为-8,就是所有时间往前挪8小时。 + 新官网:http://www.hsltechnology.cn/,还有全新的使用文档的地址:http://www.hsltechnology.cn/Doc/HslCommunication + 本软件已经申请软件著作权,软著登记号:2020SR0340826,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + SiemensPPIOverTcp: 修复在通信速率比较慢的情况下,数据包发生多次接收的时候,接收不正确的bug。 + SecsValue: 修复在创建None类型的数据时,引发空对象的异常。 + SecsHsms: 优化Secs协议的客户端和服务器的心跳接收,修复了和其他客户端测试连接不正常的bug,DEMO界面添加大量的测试信息。 + CJT188: CJT188OverTcp 协议新增属性 StationMatch 用来标记是否匹配到站号一致的报文再返回,默认为false,修复读取数据失败时,直接报异常的bug。 + SiemensS7Server: 修复西门子虚拟PLC在使用node-red的s7组件访问时频繁在线,掉线的bug,原因来自消息id不匹配。 + DLTTransform: 当没有遇到内置转换DLT数据的时候,不再返回失败,返回数据的HEX字符串形式,用来支持扩展的情况读取。 + HslCommunication的netstandard版本的库所依赖的System.IO.Port 版本调整为 6.0.0 + Demo: 完善TCP/UDP调试窗体,Server端修复选择文本不显示字节长度的bug,修复关闭时连接不断开的bug,界面位置调整优化。 + 新官网:http://www.hsltechnology.cn/,还有全新的使用文档的地址:http://www.hsltechnology.cn/Doc/HslCommunication + 本软件已经申请软件著作权,软著登记号:2020SR0340826,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + SharpList: 修复Add一个新的值的时候,每隔指定长度次数时数据丢失一次的bug。新增LastValue( )方法获取最后一个值。 + AllenBradleyNet: ReadBool(string address, short length); 支持读取以int类型为基础的bool数组,支持从中间任意位置开始读,返回任意长度。地址前加i=,例如i=AAA[10] + NetSoftUpdateServer: 修复路径在linux下运行时,路径分隔符识别不正确,导致文件下载失败的bug。 + Modbus: modbus的地址支持自定义写入功能码,例如自定义的服务器有个数据区,读使用07功能码,写使用08功能码,那么地址可以表示为 x=7;w=8;100 依然可以支持站号。 + CJT188Helper: 修复CJT188协议再读取水表数据的时候,数据位颠倒的bug。 + Omron: 在欧姆龙Fins协议里,当读取位数据超过1998时会发生错误,现在根据1998长度自动切割,也就是支持任意长度了。 + ReverseBytesTransform: 修复指定DataFormat对象实例化的时候,指定DataFormat无效的bug。 + NetworkDoubleBase: 基础的网络设备通信基类支持了使用MQTT中转读取的方式,指定mqtt对象,读Topic,写Topic就可以远程读写PLC信息。可以配合我司的边缘网关系统的设备转MQTT使用。使用手册后面推出。 + DLT645With1997: 修复DLT645-2007解析数据异常的bug,修复读取电压倍率不对的bug。 + ModbusHelper: 修复汇川PLC读取bool时,当指定MX500.7能读bool值,但是MX501.7 这种地址时,获取不到正确的值的bug。 + Authorization: 支持一种在线激活方式,使用指定ip,端口,令牌获取远程激活码来激活的操作,后续扩展临时激活授权测试的功能。 + FanucSeries0i: 读取程序的API接口ReadProgram再接收完程序后,再接收一次0x18指令的报文。 + OmronHostLinkHelper: 欧姆龙HostLink协议在解析报文的错误码时,当解析失败时,增加错误捕获,并提示原始报文。 + 新官网:http://www.hsltechnology.cn/,还有全新的使用文档的地址:http://www.hsltechnology.cn/Doc/HslCommunication + 本软件已经申请软件著作权,软著登记号:2020SR0340826,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + byte[]: 类型byte[]新增加一个扩展方法,ReverseByWord,直接可以调用按照字反转字节数据信息。 + OmronCipNet: 欧姆龙的CIP协议优化,写入数组时,根据地址是否带索引,来自动确认写入的长度信息。 + MelsecMcServer: MC协议的虚拟PLC部分,在二进制下支持了随机字读取(0403)和块读取(0406)的功能码。 + WebSocketServer: 现在服务端新增属性:TopicWildcard,如果客户端使用通配符订阅数据点。规则和MQTT的通配符一致。 + HttpServer: 修复request.ContentType为空的情况下引发的异常,原因来自对文件上传的判断。 + SiemensS7Net: 修复西门子PLC在不连接的情况下,直接同步方法读写PLC相关的值的时候,因为pdu初始值不正常导致第一次读写失败的bug。 + Demo: Tcp的服务器调试界面里,修复点击发送客户端时,发送的数据不显示的bug。 + DLT645With1997OverTcp: 修复使用异步ReadDoubleAsync读取数据的时候,数据结果解析不正确的bug。 + OpenProtocolNet: 完善开放以太网协议,并且基本测试通过,支持自定义的功能码读取,支持订阅操作。 + 新官网:http://www.hsltechnology.cn/,还有全新的使用文档的地址:http://www.hsltechnology.cn/Doc/HslCommunication + 本软件已经申请软件著作权,软著登记号:2020SR0340826,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + Dll: 用于激活的类Authorization新增一个方法SetDllContact,用于设置提醒激活的联系方式,可以设置自定义的联系方式。 + Demo: 修复安川的MemobusUdpNet的测试界面的点击实例化按钮后,界面还是灰的bug。 + AllenBradleyNet: 修复ab-plc的CIP协议,当触发0x64错误码的时候,一直重复读写无法恢复成功的bug,现在会自动重连操作。 + SiemensS7Net: 新增对DTL格式的时间数据读写的API接口,使用ReadDTLDataTime和WriteDTLTime来读写操作 + LogStatisticsBase: 修复当系统的时间往回调的时候引发异常的bug,原因来自索引偏移位置会变成负数。 + websocketServer: Websocket服务器header接收订阅时,支持url转义,以及修复开启通配符模式情况下,消息驻留发送失败的bug。 + Demo: 串口调试界面以及网口调试界面,返回的数据支持勾选自动返回,只要在发送框里提前输入数据。 + Dlt645: DLT645的地址支持reverse标记,用来支持在某些不标准的协议的设备,数据顺序没有颠倒的情况,例如:reverse=false;02-01-01-00 + Inovance: 汇川的AM系列的地址,支持MD的地址格式解析,同时适用于读写操作,MD100=MW200 + SiemensS7Helper: 修复了西门子虚拟PLC及SiemensS7Net的写入字符串的同步方法,字符创长度信息和实际不匹配的bug。 + 新官网:http://www.hsltechnology.cn/,还有全新的使用文档的地址:http://www.hsltechnology.cn/Doc/HslCommunication + 本软件已经申请软件著作权,软著登记号:2020SR0340826,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + WebsocketServer: 在发布Topic数据的时候,新增一个API,允许指定reatain属性,如果不指定,则用对象自己的设置。 + InovanceHelper:汇川读取byte的方法新增错误异常捕获,返回失败的说明信息。 + SiemensS7Server: 修复虚拟服务器在接收远程客户端的写入定时器,计数器时,地址偏移不正确的bug。 + modbus: 当调用地址为 x=1;100 进行写入bool数据的时候,修复功能码不会自动修正为正确的默认功能码的bug。适用于 rtu, tcp, rtu overTcp + BeckhoffAdsServer: 修复当远程客户端读取M100.0 的bool类型时,指定长度大于1时,返回数据不正确的bug。 + BeckhoffAdsNet: 修复在读写I,Q地址类型时,初始偏移位置不正确的bug,无论是字读写,还是位读写都测试通过。虚拟PLC侧自动识别偏移地址。 + DLT645: 修复DLT645的1997及2007版本串口通信时,在某些特殊情况下通信速度慢导致接收数据长度不够引发异常的bug。 + MegMeet: 新增麦格米特的PLC的通信类,底层使用Modbus协议,支持串口,网口,支持系列:MC80/MC100/MC200/MC280/MC200E + KeyenceDLEN1: 新增基恩士的以太网模块通信协议实现,主要用于各种传感器的数据读写操作,提供DEMO测试。 + NetworkBase: NetworkBase基础通信基类,新增了一些基于SSL加密通信的报文收发的方法支持。 + MqttClient: MqttClient支持了使用证书的方式进行通信,设置MqttConnectionOptions.CertificateFile为证书路径即可实现证书加密及校验,已和EMQX测试通过。 + 新官网:http://www.hsltechnology.cn/,还有全新的使用文档的地址:http://www.hsltechnology.cn/Doc/HslCommunication + 本软件已经申请软件著作权,软著登记号:2020SR0340826,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + HslCertificate: 新增自定义的证书类,支持持有者颁发证书,对证书验证签名,例如可以使用证书实现对API接口权限验证,详细查看API文档。 + OmronCipNet: 修复异步写入字符串时,编码无法指定ASCII之外的bug,导致无法使用UTF8写入中文。 + ModbusTcpServer: 重新增加属性 StationCheck, ,当服务器只有一个站号的时候,设置为True表示校验客户端请求的站号,反之则不校验。 + DLT645及DLT645OverTcp: 支持写入字符串的方法,字符串将会转为二进制并且颠倒顺序,写入到仪表里去,写int及double数组也会转字符串数组写入。 + WebsocketServer: 服务器初步支持了SSL通信,使用证书通信,需要带私钥的证书才能成功创建,等待进一步的测试。 + LogNetBase: 日志获取相关的存储列表的方法中,增加一个错误捕获,在极端情况下可能会因为错误异常。 + Authorization: 激活系统的方法新增基于证书激活的方式,具体使用方法参考官网文档。 + Demo: Demo主界面的左侧的设备列表信息改为浮动窗体,可以自由隐藏,DEMO也支持了使用证书激活。 + 新官网:http://www.hsltechnology.cn/,还有全新的使用文档的地址:http://www.hsltechnology.cn/Doc/HslCommunication + 本软件已经申请软件著作权,软著登记号:2020SR0340826,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + DLT698: 698协议新增属性UseSecurityResquest,设置是否使用安全模式来通信,默认true,影响范围包括串口,透传,网口类,特殊的仪表需要设置 false。 + DLT698: 新增写入时间数据到地址地址的接口,WriteDateTime( string address, DateTime time ),新增698协议的接口 IDlt698 + FanucInterfaceNet: Fanuc机器人对象读取机器人数据时,FanucData解析字符串数据的编码可以手动调整指定。 + MelsecFxLinksHelper: 三菱的计算机链接协议里,如果传入的报文以ENQ开头的,则认为传入原始包,不进行封包处理。 + OmronFinsAddress: 欧姆龙的Fins协议支持CF地址,可以读取脉冲信号,地址一秒脉冲地址示例:CF1.2 新增IHostLinkCMode, IOmronFins接口。 + 新增三菱的编程口接口 IMelsecFxSerial,新增西门子PPI接口 ISiemensPPI,永宏编程提炼接口 IFatekProgram + AllenBradleyNet: 批量读取地址数组的方法,传入长度数组参数由 int 改为 ushort 类型,所有的CIP协议实现了统一的IReadWriteCip接口。(可能不兼容) + FanucSeries0i: ReadProgram方法取消再次接收0x18的命令,因为在 32i 的机子上是会触发超时接收。 + YamahaRCX: 雅马哈机器人新增 JogXY 接口,使用微动的方式操作六轴的动作信息,在demo界面上支持JOG的测试。 + AllenBradleyHelper: 修复CIP协议创建命令为0x4D写入数据报文时,数据长度过大导致溢出的bug,在解析返回结果数据时增加错误捕获操作。 + Modbus: 所有Modbus的客户端以及RTU主站类,接口IModbus新增使用功能码0x17的一条报文实现读写方法ReadWrite,虚拟服务器支持该功能码。 + SiemensS7Net: Read( string[] address, ushort[] length )方法不仅仅根据19个长度切割,还根据长度之和是否满足200字节切割。 + FinsTcp: Fins协议读取bool时,发现返回数据长度小于指定长度时,自动偏移地址并读取剩余数据,然后返回全部给调用者。 + SimpleHybirdLock: 通信的混合锁新增当前锁对象等待的计数属性:LockingTick,可以用来监视锁对象的竞争情况。 + Demo: TCP转TCP的支持二进制和ASCII格式的转换显示,完善MegMeet,Lsis的添加,批量读取控件增加提示功能。 + HslCommunication: 大部分PLC通信的消息解析代码增加合法性验证,并且增加异常捕获,防止及其特殊的情况导致系统奔溃。 + Demo: Demo程序大升级,测试界面支持定时读取,定时写入,写入支持动态数据变化。批量读取,报文读取,特殊功能测试优化,更加便捷。 + 新官网:http://www.hsltechnology.cn/,还有全新的使用文档的地址:http://www.hsltechnology.cn/Doc/HslCommunication + 本软件已经申请软件著作权,软著登记号:2020SR0340826,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + MelsecFxSerial: MelsecFxSerial的报文日志记录格式调整为ASCII格式,当设备的日志实例化时,就会自动当前的通信日志。 + IReadWriteMc,IReadWriteA3C: 新增属性EnableWriteBitToWordRegister,当开启后支持往D寄存器写入位数据,实现方式为读字,修改位,写字操作,具体风险查看该属性说明。 + KeyenceMcNet, KeyenceMcAsciiNet: 基恩士的MC协议的通信,修复ZR地址因为地址进制导致读取不到正确地址的bug,现在使用16进制地址表示。 + KeyenceMcNet, KeyenceMcAsciiNet: 地址兼容了基恩士自己的地址格式,可以直接输入 DM100, FM100, EM100, MR015, 或是直接 MR1.2 等 + HslHelper: 新增属性LockLimit表示竞争锁上限(默认1000),NetworkDoubleBase,NetworkUdpBase,SerialBase检测当锁竞争达LockLimit次时,直接返回失败,不在增加竞争。 + HslTimeOut: 检查socket超时部分的功能代码,当处于linux系统下时,在确认超时close之前,增加一个 Disconnect操作,解决特殊情况close会卡时间的bug。 + HslHelper: HslHelper新增属性UseAsyncLock, 标记本通信库的单个通信对象在异步通信的时候是否使用异步锁,默认True, 当使用控制台或是纯后台线程采集时,配置 False 更好。 + Modbus: 在写入单个的short及ushort值时,默认使用06功能码,现在支持如果在地址里使用w标记,例如 w=16;100 时,写入时报文就使用16功能码。 + TcpForward: 新增属性CacheSize,表示中转时候的数据缓存大小,默认是2048 + Net2.0, 3.5, Standard项目添加缺失的类:VigorServer, OmronHostLinkCModeServer, MelsecFxLinksServer, KeyenceDLEN1 + 新官网:http://www.hsltechnology.cn/,还有全新的使用文档的地址:http://www.hsltechnology.cn/Doc/HslCommunication + 本软件已经申请软件著作权,软著登记号:2020SR0340826,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + OmronCipNet: 修复写入单个Byte数据对象,或是奇数长度的byte[]时,plc报错31错误码的异常,现在可以正常的写入了。 + SiemensS7Net: 西门子批量读取地址数组的方法里,原先总长度按照200字节切割变更为按照自动获取的pdu长度进行切割。 + MqttClient: Mqtt客户端的连接类MqttConnectionOptions新增属性UseSSL指示是否开始SSL/TLS加密功能,验证证书时修复服务器名称输入错误导致有些服务器连接失败的bug。 + NetworkUdpBase: 优化UDP通信基类,增加设置获取PipeSocket方法, 支持设置多个端口,因网络读取失败时自动切换另一个端口。 + Modbus: ModbusRtu设备在提取接收到的报文时,校验数据长度并且如果发现长度太长,则按照标准报文长度切割,即使后面跟0xFF扰码也能正确读取 + Memobus, DigitronCPL, MegMeet, Delta 相关的通信类,补全缺失的 MPRC 接口注册功能。 + Demo: 三菱相关的PLC测试界面在连接PLC失败的时候,原先只提示连接失败,现在提示更加详细的信息。 + 新官网:http://www.hsltechnology.cn/,还有全新的使用文档的地址:http://www.hsltechnology.cn/Doc/HslCommunication + 本软件已经申请软件著作权,软著登记号:2020SR0340826,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + NetworkBase: 在ReceiveByMessage方法里,新增判断消息报文剩余长度小于0时,直接返回头报文信息,防止在万一接收到错乱数据导致小于0引发bug的异常。 + FFTFilter: 傅立叶变化的Filter滤波方法,修复当数据有负数的时候,只能得到正数结果的bug,现在可以还原出带有负数情况的波形图。 + SiemensS7Server: SiemensS7Server增加在握手报文处理时,对握手报文合法性的检查操作,防止收到一些奇怪数据时导致奔溃。 + DLT698: 修复在UseSecurityResquest为默认True情况下,APDU指令创建不正确的bug,涵盖DLT698, DLT698TcpNet, DLT698OverTcp类。 + FanucSeries0i: 新增根据字符串程序名读取程序的方法接口ReadProgram( string program, string path = "" ),用来支持读取非数字名称的程序号。 + Toyota: 新增丰田工机的计算机链接协议实现,ToyoPuc 类,通过2PORT-EFR模块实现对PLC的读写数据操作,同时增加ToyoPucServer虚拟PLC进行测试。 + DLT698: 修复698的协议中的CheckResponse,当请求类型不支持时,引发空对象的异常。 + SerialBase: 间歇时间SleepTime允许设置0及小于0,小于0就是不进行任何休眠,三菱编程口MelsecFxSerial增加对消息完整长度的校验机制。 + OmronCipServer: 新增欧姆龙自身的CIP服务器,支持客户端使用OmronCipNet类和OmronConnectedCipNet进行通信,支持普通点位,数组,字符串的读写操作。 + CipServer: AllenBradleyServer和OmronCipServer支持所有的标签数据存储到文件和从文件加载的操作,demo里服务器的存储加载支持路径选择。 + MelsecA1EServer: 新增模拟PLC的实际情况,针对bool读取长度超过256返回错误码,针对字单位读取长度超过64即返回错误。 + MelsecA1E: MelsecA1ENet及MelsecA1EAsciiNet类修复读取bool数组时长度超过256报错的bug,MelsecA1EServer完善读取bool超过256返回错误。 + Mewtocol: 松下的Mewtocol的串口及网口类对象新增支持读取PLC型号的方法ReadPlcType,虚拟服务器也支持了该功能码。 + SerialBase, NetworkDoubleBase: 优化通信代码,针对Thread.Sleep方法也进行错误捕获,防止可能的异常。 + 新官网:http://www.hsltechnology.cn/,还有全新的使用文档的地址:http://www.hsltechnology.cn/Doc/HslCommunication + 本软件已经申请软件著作权,软著登记号:2020SR0340826,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + DLT645: DLT645-2007 新增对设备返回的报文进行和校验码校验的步骤,如果校验失败,返回错误信息。 + MelsecA1EAsciiNet: 修复在字读取长度超过64字时,或是bool读取超过256位时,读取结果不正确的bug。现在支持读取任意的长度数据。 + AllenBradleyServe: 修复AllenBradleyServer及OmronCipServer在配置了写入时创建新标签后,写入字符串数据仍然报错,提示标签不存在的bug。 + IDlt645: DLT645接口新增Password属性及OpCode,方便在通信时动态修改这两个参数,主要针对DLT645/2007的,对于 DLT645/1997 协议来说无效 + MelsecMcServer: 修复MC虚拟服务器在ASCII模式下,写入D之外的寄存器,但是仍然写入D寄存器的bug,影响范围包括A3CServer。 + Melsec: 三菱的MC协议开放属性 PlcNumner,可以自由的设置,表示PLC编号。影响范围:MelsecMcNet, MelsecMcAsciiNet, MelsecMcUdp, MelsecMcAsciiUdp + OmronFinsServer: 欧姆龙的FinTcp协议的虚拟PLC支持了CF数据地址,无论是服务器上,还是通过客户端来读写CF数据都可以正确的读取。 + FanucSeries0i: 客户端demo修复删除程序,只能删除主目录的程序号的bug,现在可以删除任意指定路径的程序文件信息。 + WebsocketServer: websocket服务器运行时,当客户端使用火狐浏览器连接服务器时,修复检测websocket连接失败的bug。 + ToyoPuc: 修复丰田工机PLC中,当地址是 U0 及 H0 的时候,地址输入解析不正确的bug,原先的bug是忽略第一个数字。 + AllenBradleyServer: CIP虚拟服务器优化通信的细节,正确的设置了基于连接模式下的各种连接ID信息,当PLC使用MSG模块读写虚拟PLC时也顺利通过。 + Demo: HslCommunicationDemo程序几乎所有的设备测试界面的线程压力测试界面单独拎出来,显示单次通信的平均耗时。 + Demo: HslCommunicationDemo程序几乎所有的设备测试界面增加设备的地址示例说明,带地址示例,含义,部分PLC提供地址范围说明。 + Demo: HslCommunicationDemo程序几乎所有的设备测试界面增加数据点位表的功能,可以配置点位表,保存,加载,然后多个点位同时刷新。 + .net standard 框架的dll依赖的 System.IO.Ports 版本由 6.0.0 升级到 7.0.0。 + 新官网:http://www.hsltechnology.cn/,还有全新的使用文档的地址:http://www.hsltechnology.cn/Doc/HslCommunication + 本软件已经申请软件著作权,软著登记号:2020SR0340826,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + Demo: 保存设备的连接参数及点位数据的时候,支持了设置密码,设置密码后,加载该设备参数时,必须输入正确的密码才能打开。 + Demo: 串口调试界面,TCP调试界面,TCP Server调试界面大幅度的调整,优化,更好的区分收发数据,以及数据长度信息。 + Demo: 在demo界面的曲线控件界面,从实时曲线修改为历史曲线控件,新增设置颜色,曲线样式,显示最大值,最小值信息,自动滚动条往右。 + Demo: 调试的程序在连接成功,或是打开串口之后,直接在测试界面上显示当前的连接类的示例代码,初始化参数和demo界面保持一致,方便直接复制。 + ModbusTcpServer: modbus虚拟plc当属性UseModbusRtuOverTcp = true时,同时支持rtu over tcp报文及 ascii over tcp报文,并对 ascii 报文做了更加严格的区分,防止弄乱。 + ModbusRtuOverTcp: 通过调整底层基类的读取空消息的报文时,可能引发数据不完整的bug,针对部分回数据断断续续的设备,现在可以读取正确的值信息。 + AllenBradleyNet: 优化CIP协议的读写字符串功能,对长度判断更加的完善,当写入字符串时,可以指定额外的type值,例如地址为"type=0xD1;AA",影响范围:AllenBradleyMicroCip + HslTimeOut: 优化超时的代码信息,单独添加超时的日志信息,如需记录,可以实例化 HslTimeOut.TimeoutLogNet 属性,并且可以获取到当前所有的超时判断次数 HslTimeOut.TimeoutDealCount + SecsHsms: 优化secs的代码,增加在解析secs消息的时候,对异常错误的消息捕获并记录日志,demo界面优化显示信息,并提供代码示例。 + AllenBradleyNet: 写入字符串的时候,如果类型为 DA 的情况,则使用另外的写入方式,在microcip上测试成功。 + PanasonicHelper: 修复松下的mewtocol协议使用字的方式写入数据到Y,R,L地址时,引发0x41错误码的bug,原因来自结尾地址偏移异常。 + 新官网:http://www.hsltechnology.cn/,还有全新的使用文档的地址:http://www.hsltechnology.cn/Doc/HslCommunication + 本软件已经申请软件著作权,软著登记号:2020SR0340826,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + + + YRCHighEthernet: 新增ReadManagementTimeSpan接口,用来读取持续的时间,返回的是字符串信息。完善demo界面,提供示例代码信息。 + NetworkDoubleBase: 新增一个发送前的报文头设置属性 SendBeforeHex,当使用lora中转通信时,可以设置为lora站号,例如00 00 00 02 + ModbusUdpServer: 新增基于UDP通信的ModbusUdpServer虚拟服务器类,在demo界面上的ModbusTcpServer启动时,可选TCP还是UDP功能,方便测试。 + MelsecFxLinksOverTcp: 修复属性 WaittingTime 可以设置0xF 以上值的bug,实际这个值不允许设置 0x0f 以上。 + XinJEServer: 当服务器站号不一致的时候,并且服务器设置检查站号的情况,直接返回站号不一致的错误消息。 + KeyenceNanoServer: 基恩士的上位链路虚拟PLC的字符串是否反转默认设置 true, 如果需要,手动修改server.ByteTransform.IsStringReverseByteWord + FanucSeries0i: 新增方法 ReadAxisNames 读取轴名称以及 ReadSpindleNames读取主轴名称。 + IEC104: 添加总召唤方法TotalSubscriptions,优化值解析的过程,Demo界面进行了优化,显示报文的时候,显示其对应的功能说明,api文档新增示例。 + AllenBradleyNet: 修复当PLC对象修改了ByteTransform.DataFormat的值后,导致读取PLC时提示会话ID不一致的bug。 + DEMO: 在TCP Server调试的界面上,增加保存当前界面的配置参数的功能,连带配置的报文列表也一并存储。 + DEMO: 修复DebugControl控件在窗体拖动时,重复触发发送数据按钮的bug,多来回拖动后将会导致程序异常卡顿。 + 新官网:http://www.hsltechnology.cn/,还有全新的使用文档的地址:http://www.hsltechnology.cn/Doc/HslCommunication + 本软件已经申请软件著作权,软著登记号:2020SR0340826,任何盗用软件,破解软件,未经正式合同授权而商业使用均视为侵权。 + + + +
+ + + 结构体的句柄信息 + + + + + 实例化一个默认的对象
+ instantiate a default object +
+
+ + + 使用原始字节的数据,索引信息来实例化一个对象
+ Instantiate an object with raw bytes of data, index information +
+ 原始字节数据 + 起始的偏移索引 +
+ + + 返回项数 + + + Count of Items returned + + + + + 结构体定义大小 + + + This is the number of structure members + + + + + 使用读取标记服务读取结构时在线路上传输的字节数 + + + This is the number of bytes of the structure data + + + + + 成员数量 + + + This is the number of structure members + + + + + 结构体的handle + + + This is the Tag Type Parameter used in Read/Write Tag service + + + + + AB PLC的数据标签实体类
+ Data tag entity class of AB PLC +
+
+ + + 实例化一个默认的对象
+ instantiate a default object +
+
+ + + 实例ID
+ instance ID +
+
+ + + 当前标签的名字
+ the name of the current label +
+
+ + + 当前标签的类型代号,例如 0x0C1 表示bool类型,如果当前的标签的True,那么本属性表示结构体的实例ID
+ The type code of the current tag, for example 0x0C1 means bool type, if the current tag's is True, + then this attribute indicates the instance ID of the structure +
+
+ + + 数据的维度信息,默认是0,标量数据,1表示一维数组,2表示二维数组
+ The dimension information of the data, the default is 0, scalar data, 1 means a one-dimensional array, 2 means a two-dimensional array +
+
+ + + 当前的标签是否结构体数据
+ Whether the current label is structured data +
+
+ + + 当前如果是数组,表示数组的长度,仅在读取结构体的变量信息时有效,为-1则是无效。 + + + + + 如果当前的标签是结构体的标签,则表示为结构体的成员信息 + + + + + 用户自定义的额外的对象 + + + + + 获取或设置本属性实际数据在结构体中的偏移位置信息
+ Get or set the offset position information of the actual data of this property in the structure +
+
+ + + 获取类型的文本描述信息 + + 文本信息 + + + + + + + 克隆单个的标签数据信息 + + 标签信息 + 新的实例的标签 + + + + 克隆整个的标签数组信息 + + 标签数组信息 + 标签数组 + + + + 从指定的原始字节的数据中,解析出实际的节点信息 + + 原始字节数据 + 起始的索引 + 标签信息 + + + + 从指定的原始字节的数据中,解析出实际的标签数组,如果是系统保留的数组,或是__开头的,则自动忽略。 + + 原始字节数据 + 起始的索引 + 是否局部变量 + 输出最后一个标签的实例ID + 标签信息 + + + + 计算到达指定的字节的长度信息,可以用来计算固定分割符得字节长度 + + 原始字节数据 + 索引位置 + 等待判断的字节 + 字符串长度,如果不存在,返回-1 + + + + 从结构体的数据中解析出实际的子标签信息 + + 原始字节 + 偏移索引 + 结构体句柄 + 结果内容 + + + + 基于连接的对象访问的CIP协议的实现,用于对罗克韦尔 PLC进行标签的数据读写,对数组,多维数组进行读写操作,支持的数据类型请参照API文档手册。
+ The implementation of the CIP protocol based on connected object access is used to read and write tag data to Rockwell PLC, + and read and write arrays and multidimensional arrays. For the supported data types, please refer to the API documentation manual. +
+ + 支持普通标签的读写,类型要和标签对应上。如果标签是数组,例如 A 是 INT[0...9] 那么Read("A", 1),返回的是10个short所有字节数组。 + 如果需要返回10个长度的short数组,请调用 ReadInt16("A[0], 10"); 地址必须写 "A[0]",不能写 "A" , 如需要读取结构体,参考 + + + 首先说明支持的类型地址,在PLC里支持了大量的类型,有些甚至在C#里是不存在的。现在做个统一的声明 + + + PLC类型 + 含义 + 代号 + C# 类型 + 备注 + + + bool + 位类型数据 + 0xC1 + bool + + + + SINT + 8位的整型 + 0xC2 + sbyte + 有符号8位很少用,HSL直接用byte + + + USINT + 无符号8位的整型 + 0xC6 + byte + 如需要,使用实现 + + + BYTE + 8位字符数据 + 0xD1 + byte + 如需要,使用实现 + + + INT + 16位的整型 + 0xC3 + short + + + + UINT + 无符号的16位整型 + 0xC7 + ushort + + + + DINT + 32位的整型 + 0xC4 + int + + + + UDINT + 无符号的32位整型 + 0xC8 + uint + + + + LINT + 64位的整型 + 0xC5 + long + + + + ULINT + 无符号的64位的整型 + 0xC9 + ulong + + + + REAL + 单精度浮点数 + 0xCA + float + + + + DOUBLE + 双精度浮点数 + 0xCB + double + + + + STRING + 字符串数据 + 0xD0 + string + 前两个字节为字符长度 + + + 8bit string BYTE + 8位的字符串 + 0xD1 + + 本质是BYTE数组 + + + 16bit string WORD + 16位的字符串 + 0xD2 + + 本质是WORD数组,可存放中文 + + + 32bit string DWORD + 32位的字符串 + 0xD2 + + 本质是DWORD数组,可存放中文 + + + 在读写操作之前,先看看怎么实例化和连接PLC
+ + 现在来说明以下具体的操作细节。我们假设有如下的变量:
+ CESHI_A SINT
+ CESHI_B BYTE
+ CESHI_C INT
+ CESHI_D UINT
+ CESHI_E SINT[0..9]
+ CESHI_F BYTE[0..9]
+ CESHI_G INT[0..9]
+ CESHI_H UINT[0..9]
+ CESHI_I INT[0..511]
+ CESHI_J STRING[12]
+ ToPc_ID1 ARRAY[0..99] OF STRING[20]
+ CESHI_O BOOL
+ CESHI_P BOOL[0..31]
+ 对 CESHI_A 来说,读写这么操作 + + 对于 CESHI_B 来说,写入的操作有点特殊 + + 对于 CESHI_C, CESHI_D 来说,就是 ReadInt16(string address) , Write( string address, short value ) 和 ReadUInt16(string address) 和 Write( string address, ushort value ) 差别不大。 + 所以我们着重来看看数组的情况,以 CESHI_G 标签为例子:
+ 情况一,我想一次读取这个标签所有的字节数组(当长度满足的情况下,会一次性返回数据) + + 情况二,我想读取第3个数,或是第6个数开始,一共5个数 + + 其他的数组情况都是类似的,我们来看看字符串 CESHI_J 变量 + + 对于 bool 变量来说,就是 ReadBool("CESHI_O") 和 Write("CESHI_O", true) 操作,如果是bool数组,就不一样了 + + 最后我们来看看结构体的操作,假设我们有个结构体
+ MyData.Code STRING(12)
+ MyData.Value1 INT
+ MyData.Value2 INT
+ MyData.Value3 REAL
+ MyData.Value4 INT
+ MyData.Value5 INT
+ MyData.Value6 INT[0..3]
+ 因为bool比较复杂,暂时不考虑。要读取上述的结构体,我们需要定义结构一样的数据 + + 定义好后,我们再来读取就很简单了。 + +
+
+ + + 实例化一个默认的对象 + + + + + 根据指定的IP及端口来实例化这个连接对象 + + PLC的Ip地址 + PLC的端口号信息 + + + + + + + + + + + + + + + + + + + + + + AB-PLC的DF1通信协议,基于串口实现,通信机制为半双工,目前适用于 Micro-Logix1000,SLC500,SLC 5/03,SLC 5/04,地址示例:N7:1 + + + + + Instantiate a communication object for a Allenbradley PLC protocol + + + + + 站号信息 + + + + + 目标节点号 + + + + + 源节点号 + + + + + 校验方式 + + + + + 读取PLC的原始数据信息,地址示例:N7:0 可以携带站号 s=2;N7:0, 携带 dst 和 src 信息,例如 dst=1;src=2;N7:0 + + PLC的地址信息,支持的类型见类型注释说明 + 读取的长度,单位,字节 + 是否读取成功的结果对象 + + + + 写入PLC的原始数据信息,地址示例:N7:0 可以携带站号 s=2;N7:0, 携带 dst 和 src 信息,例如 dst=1;src=2;N7:0 + + PLC的地址信息,支持的类型见类型注释说明 + 原始的数据值 + 是否写入成功 + + + + 打包命令的操作,加站号进行打包成完整的数据内容,命令内容为原始命令,打包后会自动补充0x10的值 + + 站号信息 + 等待发送的命令 + 打包之后的数据内容 + + + + + + + 构建0F-A2命令码的报文读取指令,用来读取文件数据。适用 Micro-Logix1000,SLC500,SLC 5/03,SLC 5/04, PLC-5,地址示例:N7:1
+ Construct a message read instruction of 0F-A2 command code to read file data. Applicable to Micro-Logix1000, SLC500, SLC 5/03, SLC 5/04, PLC-5, address example: N7:1 +
+ 目标节点号 + 原节点号 + 消息号 + PLC的地址信息 + 读取的数据长度 + 初步的报文信息 + + 对于SLC 5/01或SLC 5/02而言,一次最多读取82个字节。对于 03 或是 04 为225,236字节取决于是否应用DF1驱动 + +
+ + + + + + 构建0F-AA命令码的写入读取指令,用来写入文件数据。适用 Micro-Logix1000,SLC500,SLC 5/03,SLC 5/04, PLC-5,地址示例:N7:1
+ Construct a write and read command of 0F-AA command code to write file data. Applicable to Micro-Logix1000, SLC500, SLC 5/03, SLC 5/04, PLC-5, address example: N7:1 +
+ 目标节点号 + 原节点号 + 消息号 + PLC的地址信息 + 写入的数据内容 + 初步的报文信息 + + 对于SLC 5/01或SLC 5/02而言,一次最多读取82个字节。对于 03 或是 04 为225,236字节取决于是否应用DF1驱动 + +
+ + + 构建0F-AB的掩码写入的功能 + + 消息号 + PLC的地址信息 + 位索引信息 + 通断值 + 命令报文 + + + + 提取返回报文的数据内容,将其转换成实际的数据内容,如果PLC返回了错误信息,则结果对象为失败。
+ Extract the data content of the returned message and convert it into the actual data content. If the PLC returns an error message, the result object is a failure. +
+ PLC返回的报文信息 + 结果对象内容 +
+ + + 根据错误代码,来获取错误的具体描述文本 + + 错误的代码,非0 + 错误的描述文本信息 + + + + 根据错误代码,来获取错误的具体描述文本 + + 错误的代码,非0 + 错误的描述文本信息 + + + + + + + AB PLC的辅助类,用来辅助生成基本的指令信息 + + + + + CIP命令中PCCC命令相关的信息 + + + + + CIP命令中的读取数据的服务 + + + + + CIP命令中的写数据的服务 + + + + + CIP命令中的读并写的数据服务 + + + + + CIP命令中的读片段的数据服务 + + + + + CIP命令中的写片段的数据服务 + + + + + CIP指令中读取数据的列表 + + + + + CIP命令中的对数据读取服务 + + + + + 日期的格式 + + + + + 时间的格式 + + + + + 日期时间格式,最完整的时间格式 + + + + + 一天中的时间格式 + + + + + bool型数据,一个字节长度 + + + + + byte型数据,一个字节长度,SINT + + + + + 整型,两个字节长度,INT + + + + + 长整型,四个字节长度,DINT + + + + + 特长整型,8个字节,LINT + + + + + Unsigned 8-bit integer, USINT + + + + + Unsigned 16-bit integer, UINT + + + + + Unsigned 32-bit integer, UDINT + + + + + Unsigned 64-bit integer, ULINT + + + + + 实数数据,四个字节长度 + + + + + 实数数据,八个字节的长度 + + + + + 结构体数据,不定长度 + + + + + 字符串数据内容 + + + + + Bit string, 8 bits, BYTE, + + + + + Bit string, 16-bits, WORD + + + + + Bit string, 32 bits, DWORD + + + + + Bit string, 64 bits LWORD + + + + + 二进制数据内容 + + + + + 连接方的厂商标识 + + + + + 连接方的序列号 + + + + + 从生成的报文里面反解出实际的数据地址,不支持结构体嵌套,仅支持数据,一维数组,不支持多维数据 + + 地址路径报文 + 实际的地址 + + + + 获取枚举PLC数据信息的指令 + + 实例的起始地址 + 结果数据 + + + + 获取枚举PLC的局部变量的数据信息的指令 + + 实例的起始地址 + 结果命令数据 + + + + 获取获得结构体句柄的命令 + + 包含地址的信息 + 命令数据 + + + + 获取结构体内部数据结构的方法 + + 地址 + 句柄 + 偏移量地址 + 指令 + + + + + + + 将CommandSpecificData的命令,打包成可发送的数据指令 + + 实际的命令暗号 + 错误号信息 + 当前会话的id + CommandSpecificData命令 + 最终可发送的数据命令 + + + + 打包一个PCCC的读取的命令报文 + + 请求序号信息 + 请求的文件地址,地址示例:N7:1 + 请求的字节长度 + PCCC的读取报文信息 + + + + 打包一个PCCC的写入的命令报文 + + 请求序号信息 + 请求的文件地址,地址示例:N7:1 + 写入的原始数据信息 + PCCC的写入报文信息 + + + + 打包生成一个请求读取数据的节点信息,CIP指令信息 + + 地址 + 指代数组的长度 + 是否是连接模式下的地址,默认为false + CIP的指令信息 + + + + 打包生成一个请求读取数据片段的节点信息,CIP指令信息 + + 节点的名称 -> Tag Name + 起始的索引位置,以字节为单位 -> The initial index position, in bytes + 读取的数据长度,一次通讯总计490个字节 -> Length of read data, a total of 490 bytes of communication + CIP的指令信息 + + + + 根据指定的数据和类型,生成对应的数据 + + 地址信息 + 数据类型 + 字节值 + 如果节点为数组,就是数组长度 + 是否为连接模式的地址 + CIP的指令信息 + + + + 分析地址数据信息里的位索引的信息,例如a[10] 返回 a 和 10 索引,如果没有指定索引,就默认为0 + + 数据地址 + 位索引 + 地址信息 + + + + 写入Bool数据的基本指令信息 + + 地址 + 值 + 报文信息 + + + + 将所有的cip指定进行打包操作。 + + PLC所在的面板槽号 + 所有的cip打包指令信息 + 包含服务的信息 + + + + 将所有的cip指定进行打包操作。 + + PLC所在的面板槽号 + 所有的cip打包指令信息 + 包含服务的信息 + + + + 打包一个读取所有特性数据的报文信息,需要传入slot + + 站号信息 + 会话的ID信息 + 最终发送的报文数据 + + + + 根据数据创建反馈的数据信息 + + 反馈的数据信息 + 是否是读取 + 数据 + + + + 生成读取直接节点数据信息的内容 + + cip指令内容 + 最终的指令值 + + + + 将所有的cip指定进行打包操作。 + + 指令信息 + 服务器的代号信息 + 是否基于连接的服务 + 当使用了基于连接的服务时,当前CIP消息号信息 + 包含服务的信息 + + + + 向PLC注册会话ID的报文
+ Register a message with the PLC for the session ID +
+ 发送的上下文信息 + 报文信息 -> Message information +
+ + + 获取卸载一个已注册的会话的报文
+ Get a message to uninstall a registered session +
+ 当前会话的ID信息 + 字节报文信息 -> BYTE message information +
+ + + 初步检查返回的CIP协议的报文是否正确
+ Initially check whether the returned CIP protocol message is correct +
+ CIP的报文信息 + 是否正确的结果信息 +
+ + + 从PLC反馈的数据解析,返回解析后的数据内容,数据类型(在多项数据返回中无效),以及是否有更多的数据 + + PLC的反馈数据 + 是否是返回的操作 + 带有结果标识的最终数据 + + + + 从PLC里读取当前PLC的型号信息
+ Read the current PLC model information from the PLC +
+ PLC对象 + 型号数据信息 +
+ + + + + + 读取指定地址的日期数据,最小日期为 1970年1月1日,当PLC的变量类型为 "Date" 和 "TimeAndDate" 时,都可以用本方法读取。
+ Read the date data of the specified address. The minimum date is January 1, 1970. When the PLC variable type is "Date" and "TimeAndDate", this method can be used to read. +
+ 当前的通信对象信息 + PLC里变量的地址 + 日期结果对象 +
+ + + 使用日期格式(Date)将指定的数据写入到指定的地址里,PLC的地址类型变量必须为 "Date",否则写入失败。
+ Use the date format (Date) to write the specified data to the specified address. The PLC address type variable must be "Date", otherwise the writing will fail. +
+ 当前的通信对象信息 + PLC里变量的地址 + 时间信息 + 是否写入成功 +
+ + + + + + 读取指定地址的时间数据,最小时间为 0,如果获取秒,可以访问 ,当PLC的变量类型为 "Time" 和 "TimeOfDate" 时,都可以用本方法读取。
+ Read the time data of the specified address. The minimum time is 0. If you get seconds, you can access . + When the PLC variable type is "Time" and "TimeOfDate", you can use this Method to read. +
+ 当前的通信对象信息 + PLC里变量的地址 + 时间的结果对象 +
+ + + 使用时间格式(TIME)将时间数据写入到PLC中指定的地址里去,PLC的地址类型变量必须为 "TIME",否则写入失败。
+ Use the time format (TIME) to write the time data to the address specified in the PLC. The PLC address type variable must be "TIME", otherwise the writing will fail. +
+ 当前的通信对象信息 + PLC里变量的地址 + 时间参数变量 + 是否写入成功 +
+ + + 使用时间格式(TimeOfDate)将时间数据写入到PLC中指定的地址里去,PLC的地址类型变量必须为 "TimeOfDate",否则写入失败。
+ Use the time format (TimeOfDate) to write the time data to the address specified in the PLC. The PLC address type variable must be "TimeOfDate", otherwise the writing will fail. +
+ 当前的通信对象信息 + PLC里变量的地址 + 时间参数变量 + 是否写入成功 +
+ + + + + + + + + + + + + + + + + + + + + AB PLC的标签节点数据信息 + + + + + 实例化一个默认的对象 + + + + + 指定XML元素的资源来实例化对象信息 + + XML元素信息 + + + + 当前标签的名称信息 + + + + + 真实的数组缓存 + + + + + 是否是数组的数据 + + + + + 单个单位的数据长度信息 + + + + + 数据类型信息 + + + + + 将值转换为同等描述的序列化字符串信息 + + Xml元素 + + + + 从xml元素加载当前的节点数据信息 + + 元素信息 + + + + AB PLC的cip通信实现类,适用Micro800系列控制系统
+ AB PLC's cip communication implementation class, suitable for Micro800 series control system +
+
+ + + + + + + + + + + + + + + AB PLC的数据通信类,使用CIP协议实现,适用1756,1769等型号,支持使用标签的形式进行读写操作,支持标量数据,一维数组,二维数组,三维数组等等。如果是局部变量,那么使用 Program:MainProgram.[变量名]。
+ The data communication class of AB PLC is implemented using the CIP protocol. It is suitable for 1756, 1769 and other models. + It supports reading and writing in the form of tags, scalar data, one-dimensional array, two-dimensional array, + three-dimensional array, and so on. If it is a local variable, use the Program:MainProgram.[Variable name]. +
+ + thanks 江阴- ∮溪风-⊙_⌒ help test the dll +
+ thanks 上海-null 测试了这个dll +
+
+ 默认的地址就是PLC里的TAG名字,比如A,B,C;如果你需要读取的数据是一个数组,那么A就是默认的A[0],如果想要读取偏移量为10的数据,那么地址为A[10], + 多维数组同理,使用A[10,10,10]的操作。 +
+
+ 假设你读取的是局部变量,那么使用 Program:MainProgram.变量名
+ 目前适用的系列为1756 ControlLogix, 1756 GuardLogix, 1769 CompactLogix, 1769 Compact GuardLogix, 1789SoftLogix, 5069 CompactLogix, 5069 Compact GuardLogix, Studio 5000 Logix Emulate +
+
+ 如果你有个Bool数组要读取,变量名为 A, 那么读第0个位,可以通过 ReadBool("A"),但是第二个位需要使用
+ ReadBoolArray("A[0]") // 返回32个bool长度,0-31的索引,如果我想读取32-63的位索引,就需要 ReadBoolArray("A[1]") ,以此类推。 +
+
+ 地址可以携带站号信息,只要在前面加上slot=2;即可,这就是访问站号2的数据了,例如 slot=2;AAA,如果使用了自定义的消息路由,例如:[IP or Hostname],1,[Optional Routing Path],CPU Slot 172.20.1.109,1,[15,2,18,1],12
+ 在实例化之后,连接PLC之前,需要调用如下代码 plc.MessageRouter = new MessageRouter( "1.15.2.18.1.12" ) +
+
+ + + Instantiate a communication object for a Allenbradley PLC protocol + + + + + Instantiate a communication object for a Allenbradley PLC protocol + + PLC IpAddress + PLC Port + + + + + + + + + + The current session handle, which is determined by the PLC when communicating with the PLC handshake + + + + + Gets or sets the slot number information for the current plc, which should be set before connections + + + + + port and slot information + + + + + 获取或设置整个交互指令的控制码,默认为0x6F,通常不需要修改
+ Gets or sets the control code of the entire interactive instruction. The default is 0x6F, and usually does not need to be modified. +
+
+ + + 获取或设置当前的通信的消息路由信息,可以实现一些复杂情况的通信,数据包含背板号,路由参数,slot,例如:1.15.2.18.1.1
+ Get or set the message routing information of the current communication, which can realize some complicated communication. + The data includes the backplane number, routing parameters, and slot, for example: 1.15.2.18.1.1 +
+
+ + + + + + + + + + + + + + + 创建一个读取标签的报文指定,标签地址可以手动动态指定slot编号,例如 slot=2;AAA
+ Build a read command bytes, The label address can manually specify the slot number dynamically, for example slot=2;AAA +
+ the address of the tag name + Array information, if not arrays, is 1 + Message information that contains the result object +
+ + + 创建一个读取多标签的报文
+ Build a read command bytes +
+ The address of the tag name + Message information that contains the result object +
+ + + Create a written message instruction + + The address of the tag name + Data type + Source Data + In the case of arrays, the length of the array + Message information that contains the result object + + + + Create a written message instruction + + The address of the tag name + Bool Data + Message information that contains the result object + + + + Read data information, data length for read array length information + + Address format of the node + In the case of arrays, the length of the array + Result data with result object + + + + [商业授权] 批量读取多地址的数据信息,例如我可以读取两个标签的数据 "A","B[0]",每个地址的数据长度为1,表示一个数据,最终读取返回的是一整个的字节数组,需要自行解析
+ [Authorization] Batch read data information of multiple addresses, for example, I can read the data of two tags "A", "B[0]", the data length of each address is 1, + which means one data, and the final read returns a The entire byte array, which needs to be parsed by itself +
+ Name of the node + Result data with result object +
+ + + [商业授权] 批量读取多地址的数据信息,例如我可以读取两个标签的数据 "A","B[0]", 长度为 [1, 5],返回的是一整个的字节数组,需要自行解析
+ [Authorization] Read the data information of multiple addresses in batches. For example, I can read the data "A", "B[0]" of two tags, + the length is [1, 5], and the return is an entire byte array, and I need to do it myself Parsing +
+ 节点的名称 -> Name of the node + 如果是数组,就为数组长度 -> In the case of arrays, the length of the array + 带有结果对象的结果数据 -> Result data with result object +
+ + + Read Segment Data Array form plc, use address tag name + + Tag name in plc + array start index, uint byte index + array length, data item length + Results Bytes + + + + 使用CIP报文和服务器进行核心的数据交换 + + Cip commands + Results Bytes + + + + 使用EIP报文和服务器进行核心的数据交换 + + eip commands + Results Bytes + + + + 读取单个的bool数据信息,如果读取的是单bool变量,就直接写变量名,如果是由int组成的bool数组的一个值,一律带"i="开头访问,例如"i=A[0]"
+ Read a single bool data information, if it is a single bool variable, write the variable name directly, + if it is a value of a bool array composed of int, it is always accessed with "i=" at the beginning, for example, "i=A[0]" +
+ 节点的名称 -> Name of the node + 带有结果对象的结果数据 -> Result data with result info +
+ + + + + + 批量读取的bool数组信息,如果你有个Bool数组变量名为 A, 那么读第0个位,可以通过 ReadBool("A"),但是第二个位需要使用 + ReadBoolArray("A[0]") // 返回32个bool长度,0-31的索引,如果我想读取32-63的位索引,就需要 ReadBoolArray("A[1]") ,以此类推。
+ For batch read bool array information, if you have a Bool array variable named A, then you can read the 0th bit through ReadBool("A"), + but the second bit needs to use ReadBoolArray("A[0]" ) // Returns the length of 32 bools, the index is 0-31, + if I want to read the bit index of 32-63, I need ReadBoolArray("A[1]"), and so on. +
+ 节点的名称 -> Name of the node + 带有结果对象的结果数据 -> Result data with result info +
+ + + 读取PLC的byte类型的数据
+ Read the byte type of PLC data +
+ 节点的名称 -> Name of the node + 带有结果对象的结果数据 -> Result data with result info +
+ + + 从PLC里读取一个指定标签名的原始数据信息及其数据类型信息
+ Read the original data information of a specified tag name and its data type information from the PLC +
+ + 数据类型的定义,可以参考 的常量资源信息。 + + PLC的标签地址信息 + 读取的数据长度 + 包含原始数据信息及数据类型的结果对象 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 枚举当前的所有的变量名字,包含结构体信息,除去系统自带的名称数据信息
+ Enumerate all the current variable names, including structure information, except the name data information that comes with the system +
+ 结果对象 +
+ + + + + + 枚举结构体的方法,传入结构体的标签对象,返回结构体子属性标签列表信息,子属性有可能是标量数据,也可能是另一个结构体。
+ The method of enumerating the structure, passing in the tag object of the structure, + and returning the tag list information of the sub-attributes of the structure. The sub-attributes may be scalar data or another structure. +
+ 结构体的标签 + 是否成功 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 读取字符串数据,默认为编码
+ Read string data, default is the encoding +
+ 起始地址 + 数据长度 + 带有成功标识的string数据 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 当前写入字节数组使用数据类型 0xD1 写入,如果其他的字节类型需要调用 方法来实现。
+ The currently written byte array is written using the data type 0xD1. If other byte types need to be called Method to achieve.
+
+ 地址 + 值 + 写入结果值 +
+ + + 使用指定的类型写入指定的节点数据,类型信息参考API文档,地址支持协议类型代号信息,例如 "type=0xD1;A"
+ Use the specified type to write the specified node data. For type information, refer to the API documentation. The address supports protocol type code information, such as "type=0xD1;A" +
+ + 关于参数 length 的含义,表示的是地址长度,一般的标量数据都是 1,如果PLC有个标签是 A,数据类型为 byte[10],那我们写入 3 个byte就是 WriteTag( "A[5]", 0xD1, new byte[]{1,2,3}, 3 );
+ Regarding the meaning of the parameter length, it represents the address length. The general scalar data is 1. If the PLC has a tag of A and the data type is byte[10], then we write 3 bytes as WriteTag( "A[5 ]", 0xD1, new byte[]{1,2,3}, 3 ); +
+ 节点的名称 -> Name of the node + 类型代码,详细参见上的常用字段 -> Type code, see the commonly used Fields section on the in detail + 实际的数据值 -> The actual data value + 如果节点是数组,就是数组长度 -> If the node is an array, it is the array length + 是否写入成功 -> Whether to write successfully +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 写入单个Bool的数据信息。如果读取的是单bool变量,就直接写变量名,如果是bool数组的一个值,一律带下标访问,例如a[0]
+ Write the data information of a single Bool. If the read is a single bool variable, write the variable name directly, + if it is a value of the bool array, it will always be accessed with a subscript, such as a[0] +
+ + 如果写入的是类型代号 0xC1 的bool变量或是数组,直接使用标签名即可,比如:A,A[10],如果写入的是类型代号0xD3的bool数组的值,则需要使用地址"i="开头,例如:i=A[10]
+ If you write a bool variable or array of type code 0xC1, you can use the tag name directly, such as: A,A[10], + if you write the value of a bool array of type code 0xD3, you need to use the address" i=" at the beginning, for example: i=A[10] +
+ 标签的地址数据 + bool数据值 + 是否写入成功 +
+ + + + + + 写入Byte数据,返回是否写入成功,默认使用类型 0xC2, 如果PLC的变量类型不一样,则需要指定实际的变量类型,例如PLC的变量 A 是0xD1类型,那么地址需要携带类型信息,type=0xD1;A
+ Write Byte data and return whether the writing is successful. The default type is 0xC2. If the variable types of the PLC are different, you need to specify the actual variable type. + For example, the variable A of the PLC is of type 0xD1, then the address needs to carry the type information, type= 0xD1;A +
+ + 如何确认PLC的变量的类型呢?可以在HslCommunicationDemo程序上测试知道,也可以直接调用 来知道类型信息。 + + 标签的地址数据 + Byte数据 + 是否写入成功 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 获取写入数据的长度信息,此处直接返回数组的长度信息 + + 地址信息 + 数组长度信息 + 实际的写入长度信息 + + + + + + + 在CIP协议里,使用PCCC命令进行访问设备的原始数据文件的通信方法, + + + + + + + + + + + 实例化一个默认的对象 + + + + + 根据指定的IP及端口来实例化这个连接对象 + + PLC的Ip地址 + PLC的端口号信息 + + + + + + + + + + + 读取PLC的原始数据信息,地址示例:N7:0 + + + + + + 写入PLC的原始数据信息,地址示例:N7:0 + + + + + + + + + + + + + + + 读取PLC的地址信息,如果输入了 ST 的地址,例如 ST10:2, 当长度指定为 0 的时候,这时候就是动态的读取PLC来获取实际的字符串长度。
+ Read the PLC address information, if the ST address is entered, such as ST10:2, when the length is specified as 0, then the PLC is dynamically read to obtain the actual string length. +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 虚拟的PCCC服务器,模拟的AB 1400通信 + + + + + 实例化一个默认的对象 + + + + + + + + + + + + + + + + + + + + + + + AB PLC的虚拟服务器,仅支持和HSL组件的完美通信,可以手动添加一些节点。
+ AB PLC's virtual server only supports perfect communication with HSL components. You can manually add some nodes. +
+ + 本AB的虚拟PLC仅限商业授权用户使用,感谢支持。 + +
+ + + 实例化一个AB PLC协议的服务器
+ Instantiate an AB PLC protocol server +
+
+ + + 获取或设置当前的服务器的数据字节排序情况
+ Gets or sets the data byte ordering of the current server +
+
+ + + 获取或设置当调用写入方法的时候,如果标签不存在,是否创建新的标签信息
+ Gets or sets whether to create a new tag information if the tag does not exist when the write method is called +
+
+ + + 向服务器新增一个新的Tag值
+ Add a new tag value to the server +
+ Tag名称 + 标签值 +
+ + + 向服务器新增一个新的bool类型的Tag值,并赋予初始化的值
+ Add a new tag value of type bool to the server and assign the initial value +
+ Tag名称 + 值信息 +
+ + + 向服务器新增一个新的bool数组类型的Tag值,并赋予初始化的值
+ Add a new tag value of type bool array to the server and assign the initial value +
+ Tag名称 + 值信息 +
+ + + 向服务器新增一个新的type类型的Tag值,并赋予初始化的值
+ Add a new type tag value to the server and assign the initial value +
+ Tag名称 + 值信息 +
+ + + 向服务器新增一个新的short类型的Tag值,并赋予初始化的值
+ Add a new short tag value to the server and assign the initial value +
+ Tag名称 + 值信息 +
+ + + 向服务器新增一个新的short数组的Tag值,并赋予初始化的值
+ Add a new short array Tag value to the server and assign the initial value +
+ Tag名称 + 值信息 +
+ + + 向服务器新增一个新的ushort类型的Tag值,并赋予初始化的值
+ Add a new tag value of ushort type to the server and assign the initial value +
+ Tag名称 + 值信息 +
+ + + 向服务器新增一个新的ushort数组的Tag值,并赋予初始化的值
+ Add a new ushort array Tag value to the server and assign the initial value +
+ Tag名称 + 值信息 +
+ + + 向服务器新增一个新的int类型的Tag值,并赋予初始化的值
+ Add a new Tag value of type int to the server and assign the initialized value +
+ Tag名称 + 值信息 +
+ + + 向服务器新增一个新的int数组的Tag值,并赋予初始化的值
+ Add a new Tag value of the int array to the server and assign the initialized value +
+ Tag名称 + 值信息 +
+ + + 向服务器新增一个新的uint类型的Tag值,并赋予初始化的值
+ Add a new uint tag value to the server and assign the initial value +
+ Tag名称 + 值信息 +
+ + + 向服务器新增一个新的uint数组的Tag值,并赋予初始化的值
+ Add a new uint array Tag value to the server and assign the initial value +
+ Tag名称 + 值信息 +
+ + + 向服务器新增一个新的long类型的Tag值,并赋予初始化的值
+ Add a new Tag value of type long to the server and assign the initialized value +
+ Tag名称 + 值信息 +
+ + + 向服务器新增一个新的long数组的Tag值,并赋予初始化的值
+ Add a new Long array Tag value to the server and assign the initial value +
+ Tag名称 + 值信息 +
+ + + 向服务器新增一个新的ulong类型的Tag值,并赋予初始化的值
+ Add a new Ulong type Tag value to the server and assign the initial value +
+ Tag名称 + 值信息 +
+ + + 向服务器新增一个新的ulong数组的Tag值,并赋予初始化的值
+ Add a new Ulong array Tag value to the server and assign the initial value +
+ Tag名称 + 值信息 +
+ + + 向服务器新增一个新的float类型的Tag值,并赋予初始化的值
+ Add a new tag value of type float to the server and assign the initial value +
+ Tag名称 + 值信息 +
+ + + 向服务器新增一个新的float数组的Tag值,并赋予初始化的值
+ Add a new Tag value of the float array to the server and assign the initialized value +
+ Tag名称 + 值信息 +
+ + + 向服务器新增一个新的double类型的Tag值,并赋予初始化的值
+ Add a new tag value of type double to the server and assign the initialized value +
+ Tag名称 + 值信息 +
+ + + 向服务器新增一个新的double数组的Tag值,并赋予初始化的值
+ Add a new double array Tag value to the server and assign the initialized value +
+ Tag名称 + 值信息 +
+ + + 向服务器新增一个新的string类型的Tag值,并赋予初始化的值
+ Add a new Tag value of string type to the server and assign the initial value +
+ Tag名称 + 值信息 + 字符串的最长值 +
+ + + 向服务器新增一个新的string数组的Tag值,并赋予初始化的值
+ Add a new String array Tag value to the server and assign the initialized value +
+ Tag名称 + 值信息 + 字符串的最长值 +
+ + + + + + 获取当前的索引信息 + + 数据标签信息 + 索引信息 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 当收到CIP协议的报文的时候应该触发的方法,允许继承重写,来实现自定义的返回,或是数据监听。 + + 当前客户端的会话信息 + CIP报文数据 + 返回的报文信息 + + + + 根据CIP的核心读取到相关实际数据信息 + + 当前的会话信息 + CIP核心报文 + 实际的报文信息 + + + + 根据CIP和核心写入相关的地址数据信息 + + CIP核心报文 + 实际的报文信息 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 是否需要创建节点信息 + + 标签地址 + 是否包含值 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 所有标签的词典信息 + + + + + 当前词典的锁 + + + + + + + + AllenBradley品牌的PLC,针对SLC系列的通信的实现,测试PLC为1747。
+ AllenBradley brand PLC, for the realization of SLC series communication, the test PLC is 1747. +
+ + 地址支持的举例:A9:0, N9:0, B9:0, F9:0, S:0, ST1:0, C9:0, I:0/10, O:0/1, R9:0, T9:0, L9:0 + + + 地址格式如下: + + + 地址代号 + 字操作 + 位操作 + 备注 + + + A + A9:0 + A9:0/1 或 A9:0.1 + ASCII + + + B + B9:0 + B9:0/1 或 B9:0.1 + Bit + + + N + N9:0 + N9:0/1 或 N9:0.1 + Integer + + + F + F9:0 + F9:0/1 或 F9:0.1 + Floating point + + + S + S:0 + S:0/1 或 S:0.1 + Status S:0 等同于 S2:0 + + + ST + ST1:0 + + String + + + C + C9:0 + C9:0/1 或 C9:0.1 + Counter + + + I + I:0 + I:0/1 或 I9:0.1 + Input + + + O + O:0 + O:0/1 或 O9:0.1 + Output + + + R + R9:0 + R9:0/1 或 R9:0.1 + Control + + + T + T9:0 + T9:0/1 或 T9:0.1 + Timer + + + L + L9:0 + L9:0/1 或 L9:0.1 + long integer + + + 感谢 seedee 的测试支持。 + +
+ + + Instantiate a communication object for a Allenbradley PLC protocol + + + + + Instantiate a communication object for a Allenbradley PLC protocol + + PLC IpAddress + PLC Port + + + + + + + The current session handle, which is determined by the PLC when communicating with the PLC handshake + + + + + + + + + + + Read data information, data length for read array length information + + Address format of the node + In the case of arrays, the length of the array + Result data with result object + + + + + + + + + + + + + + + + + + + + + + + + + 分析地址数据信息里的位索引的信息 + + 数据地址 + 位索引 + 地址信息 + + + + 构建读取的指令信息 + + 地址信息,举例:A9:0 + 读取的长度信息 + 是否成功 + + + + 构建写入的报文内容,变成实际的数据 + + 地址信息 + 数据值 + 是否成功的结果对象 + + + + 构建写入的报文内容,变成实际的数据 + + 地址信息 + 数据值 + 是否成功的结果对象 + + + + 解析当前的实际报文内容,变成数据内容 + + 报文内容 + 是否成功 + + + + CIP协议的基础接口信息 + + + + + 使用指定的类型写入指定的节点数据,类型信息参考API文档,地址支持携带类型代号信息,可以强制指定本次写入数据的类型信息,例如 "type=0xD1;A"
+ Use the specified type to write the specified node data. For the type information, refer to the API documentation. The address supports carrying type code information. + You can force the type information of the data to be written this time. For example, "type=0xD1;A" +
+ + 关于参数 length 的含义,表示的是地址长度,一般的标量数据都是 1,如果PLC有个标签是 A,数据类型为 byte[10],那我们写入 3 个byte就是 WriteTag( "A[5]", 0xD1, new byte[]{1,2,3}, 3 );
+ Regarding the meaning of the parameter length, it represents the address length. The general scalar data is 1. If the PLC has a tag of A and the data type is byte[10], then we write 3 bytes as WriteTag( "A[5 ]", 0xD1, new byte[]{1,2,3}, 3 ); +
+ 节点的名称 -> Name of the node + 类型代码,详细参见上的常用字段 -> Type code, see the commonly used Fields section on the in detail + 实际的数据值 -> The actual data value + 如果节点是数组,就是数组长度 -> If the node is an array, it is the array length + 是否写入成功 -> Whether to write successfully +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 自定义的消息路由类,可以实现CIP协议自定义的路由消息
+ A custom message routing class that can implement custom routing messages of the CIP protocol +
+
+ + + 实例化一个默认的实例对象
+ instantiate a default instance object +
+
+ + + 指定路由来实例化一个对象,使用字符串的表示方式
+ Specify the route to instantiate an object, using the string representation +
+ + 路有消息支持两种格式,格式1:1.15.2.18.1.12 格式2: 1.1.2.130.133.139.61.1.0
+ There are two formats for the channel message, format 1: 1.15.2.18.1.12 format 2: 1.1.2.130.133.139.61.1.0 +
+ 路由信息 +
+ + + 使用完全自定义的消息路由来初始化数据
+ Use fully custom message routing to initialize data +
+ 完全自定义的路由消息 +
+ + + 获取路由信息 + + 路由消息的字节信息 + + + + 获取用于发送的CIP路由报文信息
+ Get information about CIP routing packets for sending +
+ 路由信息 +
+ + + 背板信息 + + + + + 槽号信息 + + + + + Ads设备的相关信息,主要是版本号,设备名称
+ Information about Ads devices, primarily version numbers, device names. +
+
+ + + 实例化一个默认的对象
+ Instantiate a default object +
+
+ + + 根据原始的数据内容来实例化一个对象
+ Instantiate an object based on the original data content +
+ 原始的数据内容 +
+ + + 主版本号
+ Main Version +
+
+ + + 次版本号
+ Minor Version +
+
+ + + 构建版本号
+ Build version +
+
+ + + 设备的名字
+ Device Name +
+
+ + + AMS消息的命令号 + + + + + AmsCommand (AMS_TCP_PORT_AMS_CMD, 0x0000) + + + + + Port Close command (AMS_TCP_PORT_CLOSE, 0x0001) + + + + + Port connect command (AMS_TCP_PORT_CONNECT, 0x1000) + + + + + Router Notification (AMS_TCP_PORT_ROUTER_NOTE, 0x1001) + + + + + Get LocalNetId header + + + + + 倍福的ADS协议,支持读取倍福的地址数据,关于端口号的选择,TwinCAT2,端口号801;TwinCAT3,端口号为851,NETID可以选择手动输入,自动输入方式,具体参考API文档的示例代码
+ Beckhoff's ADS protocol supports reading Beckhoff address data. Regarding the choice of port number, TwinCAT2, port number is 801; TwinCAT3, port number is 851, NETID can be input manually or automatically. + For details, please refer to the example of API documentation code +
+ + 支持的地址格式分四种,第一种是绝对的地址表示,比如M100,I100,Q100;第二种是字符串地址,采用s=aaaa;的表示方式;第三种是绝对内存地址采用i=1000000;的表示方式,第四种是自定义的index group, IG=0xF020;0 的地址
+ There are four supported address formats, the first is absolute address representation, such as M100, I100, Q100; the second is string address, using s=aaaa; representation; + the third is absolute memory address using i =1000000; representation, the fourth is the custom index group, the address of IG=0xF020;0 +
+ + 在实际的测试中,由于打开了VS软件对倍福PLC进行编程操作,会导致HslCommunicationDemo读取PLC发生间歇性读写失败的问题,此时需要关闭Visual Studio软件对倍福的连接,之后HslCommunicationDemo就会读写成功,感谢QQ:1813782515 提供的解决思路。 + +
+ + 地址既支持 M100, I100,Q100 ,读取bool时,支持输入 M100.0, 也支持符号的地址,s=MAIN.a ,也支持绝对地址的形式, i=1235467;
+ 下面是实例化的例子,可选两种方式 + + 实例化之后,就可以连接操作了 + + 连接成功之后,就可以进行读写操作了 + + 也可以高级的批量读取,需要自己手动解析下数据 + + 当然,还可以进一步,既实现了批量的高性能读取,又自动解析。 + +
+
+ + + 实例化一个默认的对象
+ Instantiate a default object +
+
+ + + 通过指定的ip地址以及端口号实例化一个默认的对象
+ Instantiate a default object with the specified IP address and port number +
+ IP地址信息 + 端口号 +
+ + + + + + + + + 是否使用标签的名称缓存功能,默认为 False
+ Whether to use tag name caching. The default is False +
+
+ + + 是否使用服务器自动的NETID信息,默认手动设置
+ Whether to use the server's automatic NETID information, manually set by default +
+
+ + + 获取或设置Ams的端口号信息,TwinCAT2,端口号801,811,821,831;TwinCAT3,端口号为851,852,853
+ Get or set the port number information of Ams, TwinCAT2, the port number is 801, 811, 821, 831; TwinCAT3, the port number is 851, 852, 853 +
+
+ + + 目标的地址,举例 192.168.0.1.1.1;也可以是带端口号 192.168.0.1.1.1:801
+ The address of the destination, for example 192.168.0.1.1.1; it can also be the port number 192.168.0.1.1.1: 801 +
+ + Port:1: AMS Router; 2: AMS Debugger; 800: Ring 0 TC2 PLC; 801: TC2 PLC Runtime System 1; 811: TC2 PLC Runtime System 2;
+ 821: TC2 PLC Runtime System 3; 831: TC2 PLC Runtime System 4; 850: Ring 0 TC3 PLC; 851: TC3 PLC Runtime System 1
+ 852: TC3 PLC Runtime System 2; 853: TC3 PLC Runtime System 3; 854: TC3 PLC Runtime System 4; ... +
+ AMSNet Id地址 +
+ + + 设置原目标地址 举例 192.168.0.100.1.1;也可以是带端口号 192.168.0.100.1.1:34567
+ Set the original destination address Example: 192.168.0.100.1.1; it can also be the port number 192.168.0.100.1.1: 34567 +
+ 原地址 +
+ + + 获取当前发送的AMS的网络ID信息 + + AMS发送信息 + + + + 获取当前目标的AMS网络的ID信息 + + AMS目标信息 + + + + + + + + + + + + + + + + + + + + + + 根据当前标签的地址获取到内存偏移地址
+ Get the memory offset address based on the address of the current label +
+ 带标签的地址信息,例如s=A,那么标签就是A + 内存偏移地址 +
+ + + 将字符串的地址转换为内存的地址,其他地址则不操作
+ Converts the address of a string to the address of a memory, other addresses do not operate +
+ 地址信息,s=A的地址转换为i=100000的形式 + 地址 +
+ + + 读取Ads设备的设备信息。主要是版本号,设备名称
+ Read the device information of the Ads device. Mainly version number, device name +
+ 设备信息 +
+ + + 读取Ads设备的状态信息,其中是Ads State,是Device State
+ Read the status information of the Ads device, where is the Ads State, and is the Device State +
+ 设备状态信息 +
+ + + 写入Ads的状态,可以携带数据信息,数据可以为空
+ Write the status of Ads, can carry data information, and the data can be empty +
+ ads state + device state + 数据信息 + 是否写入成功 +
+ + + 释放当前的系统句柄,该句柄是通过获取的 + + 句柄 + 是否释放成功 + + + + + + + + + + + + + + + + + + + + + + 读取PLC的数据,地址共有三种格式,一:I,Q,M数据信息,举例M0,M100;二:内存地址,i=100000;三:标签地址,s=A
+ Read PLC data, there are three formats of address, one: I, Q, M data information, such as M0, M100; two: memory address, i = 100000; three: tag address, s = A +
+ 地址信息,地址共有三种格式,一:I,Q,M数据信息,举例M0,M100;二:内存地址,i=100000;三:标签地址,s=A + 长度 + 包含是否成功的结果对象 +
+ + + + + + 批量读取PLC的数据,需要传入地址数组,以及读取的长度数组信息,长度单位为字节单位,如果是读取bool变量的,则以bool为单位,统一返回一串字节数据信息,需要进行二次解析的操作。
+ To read PLC data in batches, you need to pass in the address array and the read length array information. The unit of length is in bytes. If you read a bool variable, + it will return a string of byte data information in units of bool. , which requires a secondary parsing operation. +
+ + 关于二次解析的参考信息,可以参考API文档,地址:http://api.hslcommunication.cn
+ For reference information about secondary parsing, you can refer to the API documentation, address: http://api.hslcommunication.cn +
+ 地址数组信息 + 读取的长度数组信息 + 原始字节数组的结果对象 +
+ + + 写入PLC的数据,地址共有三种格式,一:I,Q,M数据信息,举例M0,M100;二:内存地址,i=100000;三:标签地址,s=A
+ There are three formats for the data written into the PLC. One: I, Q, M data information, such as M0, M100; two: memory address, i = 100000; three: tag address, s = A +
+ 地址信息,地址共有三种格式,一:I,Q,M数据信息,举例M0,M100;二:内存地址,i=100000;三:标签地址,s=A + 数据值 + 是否写入成功 +
+ + + 读取PLC的数据,地址共有三种格式,一:I,Q,M数据信息,举例M0,M100;二:内存地址,i=100000;三:标签地址,s=A
+ Read PLC data, there are three formats of address, one: I, Q, M data information, such as M0, M100; two: memory address, i = 100000; three: tag address, s = A +
+ PLC的地址信息,例如 M10 + 数据长度 + 包含是否成功的结果对象 +
+ + + 写入PLC的数据,地址共有三种格式,一:I,Q,M数据信息,举例M0,M100;二:内存地址,i=100000;三:标签地址,s=A
+ There are three formats for the data written into the PLC. One: I, Q, M data information, such as M0, M100; two: memory address, i = 100000; three: tag address, s = A +
+ 地址信息 + 数据值 + 是否写入成功 +
+ + + 读取PLC的数据,地址共有三种格式,一:I,Q,M数据信息,举例M0,M100;二:内存地址,i=100000;三:标签地址,s=A
+ Read PLC data, there are three formats of address, one: I, Q, M data information, such as M0, M100; two: memory address, i = 100000; three: tag address, s = A +
+ 地址信息 + 包含是否成功的结果对象 +
+ + + 写入PLC的数据,地址共有三种格式,一:I,Q,M数据信息,举例M0,M100;二:内存地址,i=100000;三:标签地址,s=A
+ There are three formats for the data written into the PLC. One: I, Q, M data information, such as M0, M100; two: memory address, i = 100000; three: tag address, s = A +
+ 地址信息 + 数据值 + 是否写入成功 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 倍福Ads协议的虚拟服务器 + + + + + 实例化一个基于ADS协议的虚拟的倍福PLC对象,可以用来和进行通信测试。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 倍福PLC的命令码
+ Command Id: https://infosys.beckhoff.com/english.php?content=../content/1033/tc3_ads_intro/index.html +
+
+ + + 读取PLC的名字和版本号等信息
+ Reads the name and the version number of the ADS device. +
+
+ + + 可以读ADS的设备读取数据
+ With ADS Read data can be read from an ADS device +
+
+ + + 将ADS数据写入到ADS的设备里去
+ With ADS Write data can be written to an ADS device +
+
+ + + 读取ADS设备里的设备状态信息和ADS状态
+ Reads the ADS status and the device status of an ADS device. +
+
+ + + 更改ADS设备的设备状态信息和ADS状态
+ Changes the ADS status and the device status of an ADS device. +
+
+ + + 在ADS设备里面创建一个通知对象
+ A notification is created in an ADS device +
+
+ + + 删除ADS设备里的一个通知对象
+ One before defined notification is deleted in an ADS device. +
+
+ + + 从ADS设备订阅一个数据的通知,将会发送到客户端
+ Data will carry forward independently from an ADS device to a Client +
+
+ + + 在写入的时候进行同时的读取
+ With ADS ReadWrite data will be written to an ADS device. Additionally, data can be read from the ADS device. +
+
+ + + 根据命令码ID,消息ID,数据信息组成AMS的命令码 + + 命令码ID + 数据内容 + 打包之后的数据信息,没有填写AMSNetId的Target和Source内容 + + + + 构建读取设备信息的命令报文 + + 报文信息 + + + + 构建读取状态的命令报文 + + 报文信息 + + + + 构建写入状态的命令报文 + + Ads state + Device state + Data + 报文信息 + + + + 构建写入的指令信息 + + 地址信息 + 数据长度 + 是否是位信息 + 结果内容 + + + + 构建批量读取的指令信息,不能传入读取符号数据,只能传入读取M,I,Q,i=0x0001信息 + + 地址信息 + 数据长度 + 结果内容 + + + + 构建写入的指令信息 + + 地址信息 + 数据长度 + 是否是位信息 + 写入的数值 + 结果内容 + + + + 构建批量写入的指令代码,不能传入读取符号数据,只能传入读取M,I,Q,i=0x0001信息 + + + 实际没有调试通 + + 地址列表信息 + 写入的数据值信息 + 命令报文 + + + + 构建写入的指令信息 + + 地址信息 + 数据 + 是否是位信息 + 结果内容 + + + + 构建写入的指令信息 + + 地址信息 + 数据 + 是否是位信息 + 结果内容 + + + + 构建释放句柄的报文信息,当获取了变量的句柄后,这个句柄就被释放 + + 句柄信息 + 报文的结果内容 + + + + 检查从PLC的反馈的数据报文是否正确 + + 反馈报文 + 检查结果 + + + + 将实际的包含AMS头报文和数据报文的命令,打包成实际可发送的命令 + + 命令头信息 + 命令信息 + 结果信息 + + + + 分析当前的地址信息,根据结果信息进行解析出真实的偏移地址 + + 地址 + 是否位访问 + 结果内容 + + + + 将字符串名称转变为ADS协议可识别的字节数组 + + 值 + 字节数组 + + + + 将字符串的信息转换为AMS目标的地址 + + 目标信息 + 字节数组 + + + + 根据byte数组信息提取出字符串格式的AMSNetId数据信息,方便日志查看 + + 原始的报文数据信息 + 起始的节点信息 + Ams节点号信息 + + + + 根据AMS的错误号,获取到错误信息,错误信息来源于 wirshake 源代码文件 "..\wireshark\plugins\epan\ethercat\packet-ams.c" + + 错误号 + 错误的描述信息 + + + + Ads标签信息 + + + + + 实例化一个默认的对象 + + 标签名 + 缓存的数据对象 + + + + 标签的名称 + + + + + 标签的数据缓存信息 + + + + + 绝对地址信息 + + + + + 台达PLC的串口通讯类,基于Modbus-Ascii协议开发,按照台达的地址进行实现。
+ The serial communication class of Delta PLC is developed based on the Modbus-Ascii protocol and implemented according to Delta's address. +
+ + 适用于DVP-ES/EX/EC/SS型号,DVP-SA/SC/SX/EH型号以及AS300型号,地址参考API文档,同时地址可以携带站号信息,举例:[s=2;D100],[s=3;M100],可以动态修改当前报文的站号信息。
+ Suitable for DVP-ES/EX/EC/SS models, DVP-SA/SC/SX/EH models and AS300 model, the address refers to the API document, and the address can carry station number information, + for example: [s=2;D100],[s= 3;M100], you can dynamically modify the station number information of the current message. +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 台达PLC的串口通讯类,基于Modbus-Ascii协议开发,使用串口转网口的透传实现,按照台达的地址进行实现。
+ The serial communication class of Delta PLC is developed based on the Modbus-Ascii protocol and implemented according to Delta's address. +
+ + 适用于DVP-ES/EX/EC/SS型号,DVP-SA/SC/SX/EH型号以及AS300型号,地址参考API文档,同时地址可以携带站号信息,举例:[s=2;D100],[s=3;M100],可以动态修改当前报文的站号信息。
+ Suitable for DVP-ES/EX/EC/SS models, DVP-SA/SC/SX/EH models and AS300 model, the address refers to the API document, and the address can carry station number information, + for example: [s=2;D100],[s= 3;M100], you can dynamically modify the station number information of the current message. +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 台达AS300的辅助帮助类信息 + + + + + 根据台达AS300的PLC的地址,解析出转换后的modbus协议信息,适用AS300系列,当前的地址仍然支持站号指定,例如s=2;D100
+ According to the PLC address of Delta AS300, the converted modbus protocol information is parsed, + and it is applicable to AS300 series. The current address still supports station number designation, for example, s=2;D100 +
+ 台达plc的地址信息 + 原始的对应的modbus信息 + 还原后的modbus地址 +
+ + + 台达PLC的相关的帮助类,公共的地址解析的方法。
+ Delta PLC related help classes, public address resolution methods. +
+
+ + + 根据台达PLC的地址,解析出转换后的modbus协议信息,适用DVP系列,当前的地址仍然支持站号指定,例如s=2;D100
+ According to the address of Delta PLC, the converted modbus protocol information is parsed out, applicable to DVP series, + the current address still supports station number designation, such as s=2;D100 +
+ 台达plc的地址信息 + 原始的对应的modbus信息 + 还原后的modbus地址 +
+ + + 读取台达PLC的bool变量,重写了读M地址时,跨区域读1536地址时,将会分割多次读取 + + 底层基础的读取方法 + PLC的地址信息 + 读取的长度信息 + 读取的结果 + + + + 写入台达PLC的bool数据,当发现是M类型的数据,并且地址出现跨1536时,进行切割写入操作 + + 底层的写入操作方法 + PLC的起始地址信息 + 等待写入的数据信息 + 是否写入成功 + + + + 读取台达PLC的原始字节变量,重写了读D地址时,跨区域读4096地址时,将会分割多次读取 + + 底层基础的读取方法 + PLC的地址信息 + 读取的长度信息 + 读取的结果 + + + + 写入台达PLC的原始字节数据,当发现是D类型的数据,并且地址出现跨4096时,进行切割写入操作 + + 底层的写入操作方法 + PLC的起始地址信息 + 等待写入的数据信息 + 是否写入成功 + + + + + + + + + + + + + + + + 台达的想关的辅助类 + + + + + 台达PLC的串口通讯类,基于Modbus-Rtu协议开发,按照台达的地址进行实现。
+ The serial communication class of Delta PLC is developed based on the Modbus-Rtu protocol and implemented according to Delta's address. +
+ + 适用于DVP-ES/EX/EC/SS型号,DVP-SA/SC/SX/EH型号以及AS300型号,地址参考API文档,同时地址可以携带站号信息,举例:[s=2;D100],[s=3;M100],可以动态修改当前报文的站号信息。
+ Suitable for DVP-ES/EX/EC/SS models, DVP-SA/SC/SX/EH models and AS300 model, the address refers to the API document, and the address can carry station number information, + for example: [s=2;D100],[s= 3;M100], you can dynamically modify the station number information of the current message. +
+
+ + + 实例化一个默认的对象
+ Instantiate a default object +
+
+ + + 指定客户端自己的站号来初始化
+ Specify the client's own station number to initialize +
+ 客户端自身的站号 +
+ + + + + + + + + + + + + + + + + + + + + + + + 台达PLC的串口转网口透传类,基于Modbus-Rtu协议开发,但是实际的通信管道使用的是网络,但是实际的地址是台达的地址进行读写操作。
+ Delta PLC's serial port to network port transparent transmission class is developed based on the Modbus-Rtu protocol, + but the actual communication channel uses the network, but the actual address is Delta's address for read and write operations. +
+ + 适用于DVP-ES/EX/EC/SS型号,DVP-SA/SC/SX/EH型号以及AS300型号,地址参考API文档,同时地址可以携带站号信息,举例:[s=2;D100],[s=3;M100],可以动态修改当前报文的站号信息。
+ Suitable for DVP-ES/EX/EC/SS models, DVP-SA/SC/SX/EH models and AS300 model, the address refers to the API document, and the address can carry station number information, + for example: [s=2;D100],[s= 3;M100], you can dynamically modify the station number information of the current message. +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 台达PLC的网口通讯类,基于Modbus-Rtu协议开发,按照台达的地址进行实现。
+ The tcp communication class of Delta PLC is developed based on the Modbus-Tcp protocol and implemented according to Delta's address. +
+ + 适用于DVP-ES/EX/EC/SS型号,DVP-SA/SC/SX/EH型号以及AS300型号,地址参考API文档,同时地址可以携带站号信息,举例:[s=2;D100],[s=3;M100],可以动态修改当前报文的站号信息。
+ Suitable for DVP-ES/EX/EC/SS models, DVP-SA/SC/SX/EH models and AS300 model, the address refers to the API document, and the address can carry station number information, + for example: [s=2;D100],[s= 3;M100], you can dynamically modify the station number information of the current message. +
+
+ + + + + + + + + + + + + + + + 地址支持X,Y,M,SM,S,T,C,HC,其中X和Y地址使用DD.DD格式,范围 X0.0~X63.15, Y0.0~Y63.15,其中X地址使用的是02功能码,其余的都是01功能码。
+ Address supports X, Y, M, SM, S, T, C, HC, where X and Y addresses use the DD.DD format, and the range is X0.0~X63.15, Y0.0~Y63.15, + where X addresses are used The one is 02 function code, and the rest are 01 function code. +
+
+ + + + 地址支持Y,M,SM,S,T,C,HC,其中Y地址使用DD.DD格式,Y0.0~Y63.15,不支持X地址的写入。
+ The address supports Y, M, SM, S, T, C, HC, where the Y address uses the DD.DD format, Y0.0~Y63.15, the writing of the X address is not supported. +
+
+ + + + 地址支持Y,M,SM,S,T,C,HC,其中Y地址使用DD.DD格式,Y0.0~Y63.15,不支持X地址的写入。
+ The address supports Y, M, SM, S, T, C, HC, where the Y address uses the DD.DD format, Y0.0~Y63.15, the writing of the X address is not supported. +
+
+ + + + 字地址支持X,Y,SR,D,T,C,HC,E, 所有的地址都是十进制的方式,地址范围参照API文档事例,举例:X1,Y10,SR100,D10,T20,C20,HC200,E2
+ Word address supports X, Y, SR, D, T, C, HC, E, all addresses are in decimal format, and the address range refers to the API document example, + for example: X1, Y10, SR100, D10, T20, C20, HC200 ,E2 +
+
+ + + + 字地址支持Y,SR,D,T,C,HC,E, 所有的地址都是十进制的方式,地址范围参照API文档事例,举例:Y10,SR100,D10,T20,C20,HC200,E2
+ Word address supports Y, SR, D, T, C, HC, E, all addresses are in decimal format, and the address range refers to the API document example, + for example: Y10, SR100, D10, T20, C20, HC200 ,E2 +
+
+ + + + + + + + + + + + + + + + + + 台达的系列信息 + + + + + 台达的Dvp系列,适用DVP-ES/EX/EC/SS型号,DVP-SA/SC/SX/EH型号 + + + + + 适用于AS300系列 + + + + + 台达PLC的相关的接口信息 + + + + + 获取或设置当前的台达PLC的系列信息,默认为 DVP 系列
+ Get or set the current series information of Delta PLC, the default is DVP series +
+
+ + + 台湾永宏公司的编程口协议,具体的地址信息请查阅api文档信息,地址允许携带站号信息,例如:s=2;D100
+ The programming port protocol of Taiwan Yonghong company, + please refer to the api document for specific address information, The address can carry station number information, such as s=2;D100 +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + FatekProgram相关的辅助方法,例如报文构建,核心读写支持 + + + + + 计算指令的和校验码 + + 指令 + 校验之后的信息 + + + + 检查当前的串口的数据接收是否完整 + + 数据流 + 是否数据接收完成 + + + + 将Fatek的基本命令打包成可以发送PLC的电文消息 + + PLC的站号信息 + 基本命令信息 + 发送PLC的电文消息 + + + + 创建一条读取的指令信息,需要指定一些参数 + + PLC的站号 + 地址信息 + 数据长度 + 是否成功的结果对象 + + + + 创建一条读取的指令信息,需要指定一些参数 + + PLC的站号 + 地址信息 + 数据长度 + 是否成功的结果对象 + + + + 提取当前的结果数据信息,针对的是字单位的方式 + + PLC返回的数据信息 + 读取的长度内容 + 结果数组 + + + + 创建一条别入bool数据的指令信息,需要指定一些参数 + + 站号 + 地址 + 数组值 + 是否创建成功 + + + + 创建一条别入byte数据的指令信息,需要指定一些参数,按照字单位 + + 站号 + 地址 + 数组值 + 是否创建成功 + + + + 检查PLC反馈的报文是否正确,如果不正确,返回错误消息 + + PLC反馈的报文信息 + 反馈的报文是否正确 + + + + 根据错误码获取到真实的文本信息 + + 错误码 + 错误的文本描述 + + + + 批量读取PLC的字节数据,以字为单位,支持读取X,Y,M,S,D,T,C,R,RT,RC具体的地址范围需要根据PLC型号来确认,地址可以携带站号信息,例如 s=2;D100
+ Read PLC byte data in batches, in word units. Supports reading X, Y, M, S, D, T, C, R, RT, RC. + The specific address range needs to be confirmed according to the PLC model, The address can carry station number information, such as s=2;D100 +
+ PLC通信的对象 + 设备的站点信息 + 地址信息 + 数据长度 + 读取结果信息 +
+ + + + + + 批量写入PLC的数据,以字为单位,也就是说最少2个字节信息,支持X,Y,M,S,D,T,C,R,RT,RC具体的地址范围需要根据PLC型号来确认,地址可以携带站号信息,例如 s=2;D100
+ The data written to the PLC in batches, in units of words, that is, at least 2 bytes of information, + supporting X, Y, M, S, D, T, C, R, RT, and RC. The specific address range needs to be based on the PLC model To confirm, The address can carry station number information, such as s=2;D100 +
+ PLC通信的对象 + 设备的站号信息 + 地址信息,举例,D100,R200,RC100,RT200 + 数据值 + 是否写入成功 +
+ + + + + + 批量读取bool类型数据,支持的类型为X,Y,M,S,T,C,具体的地址范围取决于PLC的类型,地址可以携带站号信息,例如 s=2;M100
+ Read bool data in batches. The supported types are X, Y, M, S, T, C. The specific address range depends on the type of PLC, + The address can carry station number information, such as s=2;M100 +
+ PLC通信对象 + 设备的站号信息 + 地址信息,比如X10,Y17,M100 + 读取的长度 + 读取结果信息 +
+ + + + + + 批量写入bool类型的数组,支持的类型为X,Y,M,S,T,C,具体的地址范围取决于PLC的类型,地址可以携带站号信息,例如 s=2;M100
+ Write arrays of type bool in batches. The supported types are X, Y, M, S, T, C. The specific address range depends on the type of PLC, + The address can carry station number information, such as s=2;M100 +
+ PLC通信对象 + 站号信息 + PLC的地址信息 + 数据信息 + 是否写入成功 +
+ + + + + + 使PLC处于RUN的状态 + + PLC通信对象 + 站号信息 + 是否操作成功 + + + + + + + 使PLC处于STOP状态 + + PLC通信对象 + 站号信息 + 是否操作成功 + + + + + + + 读取当前PLC的状态信息,返回一个bool数组,同时包含了几种电量信息,分别为 0: RUN/STOP, 1: BAT LOW/正常, 2: Ladder checksum error/正常, 3: 使用ROM PACK/未使用, + 4: WDT Timeout/正常, 5: 设定ID/未设ID, 6: 紧急停机/正常
+ Read the status information of the current PLC and return a bool array, which also contains several power information, 0: RUN/STOP, 1: BAT LOW/normal, + 2: Ladder checksum error/normal, 3: Use ROM PACK/ Not used, 4: WDT Timeout/Normal, 5: ID set/ID not set, 6: Emergency stop/Normal +
+ PLC通信对象 + 站号信息 + 状态结果信息 +
+ + + + + + FatekProgram协议的接口 + + + + + + + + + + + + + + + + + + + + + + + 台湾永宏公司的编程口协议,此处是基于tcp的实现,地址信息请查阅api文档信息,地址可以携带站号信息,例如 s=2;D100
+ The programming port protocol of Taiwan Yonghong company, here is the implementation based on TCP, + please refer to the API information for the address information, The address can carry station number information, such as s=2;D100 +
+ + 支持位访问:M,X,Y,S,T(触点),C(触点),字访问:RT(当前值),RC(当前值),D,R;具体参照API文档 + +
+ + + 实例化默认的构造方法
+ Instantiate the default constructor +
+
+ + + 使用指定的ip地址和端口来实例化一个对象
+ Instantiate an object with the specified IP address and port +
+ 设备的Ip地址 + 设备的端口号 +
+ + + + + + PLC的站号信息,需要和实际的设置值一致,默认为1
+ The station number information of the PLC needs to be consistent with the actual setting value. The default is 1. +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 永宏编程口协议的虚拟PLC,可以用来和类做通信测试,支持简单数据的读写操作。
+ The virtual PLC of Yonghong programming port protocol can be used to communicate with and class, + and support simple data read and write operations. +
+
+ + + 实例化一个基于Programe协议的虚拟的永宏PLC对象,可以用来和进行通信测试。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 基于串口的自由协议,需要在地址里传入报文信息,也可以传入数据偏移信息,默认为 + + + + + + + + + 实例化一个默认的对象 + + + + + + + + + + + + + + + + + 基于TCP/IP协议的自由协议,需要在地址里传入报文信息,也可以传入数据偏移信息,默认为 + + + + + + + + + 实例化一个默认的对象 + + + + + 指定IP地址及端口号来实例化自由的TCP协议 + + Ip地址 + 端口 + + + + + + + 一个对返回数据合法检查的委托实例,默认为空,不进行合法性检查,可以实例化实现任意的报文检测,返回是否合法结果。
+ A delegate instance that checks the legality of the returned data. It is empty by default and does not perform legality checking. + It can be instantiated to implement any packet inspection and return whether the result is legal or not. +
+ + 例如返回的第一个字节为0表示正常报文,否则是异常返回,可以简写:CheckResponseStatus = ( send, receive ) => receive[2] == 0 ? OperateResult.CreateSuccessResult( ) : new OperateResult( receive[2], "error" );
+ For example, if the first byte returned is 0, it means a normal message, otherwise it is an abnormal return, + which can be abbreviated as: CheckResponseStatus = ( send, receive ) => receive[2] == 0 ? OperateResult.CreateSuccessResult( ) : new OperateResult( receive[2], "error" ); +
+
+ + + 如果当前的报文使用了固定报文头加剩余报文长度来描述完整报文的情况下,可以自定义实例化报文消息对象,可以更快更完整的接收全部报文的数据。
+ If the current message uses a fixed header and the remaining message length to describe the complete message, + you can customize the instantiated message object to receive the data of all messages faster and more completely. +
+ + 例如当前的报文是modbustcp协议的话,NetMessage = new HslCommunication.Core.IMessage.ModbusTcpMessage( );
+ For example, if the current message is modbustcp protocol, NetMessage = new HslCommunication.Core.IMessage.ModbusTcpMessage( ); +
+
+ + + + length没有任何意义,需要传入原始的字节报文,例如:stx=9;00 00 00 00 00 06 01 03 00 64 00 01,stx得值用于获取数据移除的前置报文头,可以不填写
+ length has no meaning, you need to pass in the original byte message, for example: stx=9;00 00 00 00 00 06 01 03 00 64 00 01, + the value of stx is used to obtain the preamble header for data removal, can be left blank +
+
+ + + + + + + + + + + + + + + 基于UDP/IP协议的自由协议,需要在地址里传入报文信息,也可以传入数据偏移信息,默认为 + + + + + + + + + 实例化一个默认的对象 + + + + + 指定IP地址及端口号来实例化自由的TCP协议 + + Ip地址 + 端口 + + + + + + + + + + + + + + + + 基于Command-Setting-Type通信模式的协议实现,地址格式参数DEMO界面
+ Protocol implementation based on Command-Setting-Type communication mode, address format parameter DEMO interface +
+ + 本类实例化对象之后,还需要设置属性,根据实际情况来设置。 + +
+ + + 实例化一个默认的对象 + + + + + 使用指定的IP地址和端口号来实例化一个对象 + + IP地址信息 + 端口号信息 + + + + + + + + + + 从PLC读取原始的字节报文数据 + + PLC地址信息 + 长度信息 + 结果报文数据 + + + + 写入原始数据到PLC指定的地址里,返回是否写入成功 + + PLC的地址信息 + 原始数据内容 + 是否写入成功 + + + + + + + + + + 读取指定地址的byte数据,地址格式 S100
+ Reads the byte data of the specified address, the address format S100 +
+ 起始地址,格式为S100 + 是否读取成功的结果对象 + 参考的注释 +
+ + + 向PLC中写入byte数据,返回值说明
+ Write byte data to the PLC, return value description +
+ 起始地址,格式为 S100 + byte数据 + 是否写入成功的结果对象 +
+ + + + + + + + + 获取或设置当前的对象是否进行数据交换操作,将根据PLC的实际值来设定。
+ Get or set whether the current object performs data exchange operation or not, it will be set according to the actual value of the PLC. +
+
+ + + + + + 构建读取的报文指令 + + PLC的地址信息 + 读取的长度信息 + 报文构建的结果对象 + + + + 构建写入原始报文数据的请求信息 + + 地址数据 + 原始报文的数据 + 原始的写入报文数据 + + + + 根据错误信息获取相关数据信息 + + 错误代号 + 实际的错误描述信息 + + + + 根据PLC返回的数据,解析出实际的数据内容 + + 发送给PLC的数据 + PLC返回的数据 + 结果数据信息 + + + + 富士Command-Setting-type协议实现的虚拟服务器,支持的地址为 B,M,K,D,W9,BD,F,A,WL,W21,W9。具体的支持列表参考api文档
+ The virtual server implemented by Fuji Command-Setting-type protocol supports addresses B, M, K, D, W9, BD, F, A, WL, W21, W9. + For the specific support list, please refer to the api documentation +
+ + 当前的虚拟服务器实例化之后,调用 方法即可,还有个参数需要特别注意,约定了数据的大小端形式。 + +
+ + + 实例化一个富士的服务器
+
+
+ + + + + + + + + + + + 从PLC读取byte类型的数据信息,通常针对步进寄存器,也就是 S100 的地址 + + PLC地址数据,例如 S100 + 是否读取成功结果对象 + + + + 将Byte输入写入到PLC之中,通常针对步进寄存器,也就是 S100 的地址 + + PLC地址数据,例如 S100 + 数据信息 + 是否写入成功 + + + + + + + + + + + + + + + + + + + + + + + + + + + + 富士PLC的SPB协议,详细的地址信息见api文档说明,地址可以携带站号信息,例如:s=2;D100,PLC侧需要配置无BCC计算,包含0D0A结束码
+ Fuji PLC's SPB protocol. For detailed address information, see the api documentation, + The address can carry station number information, for example: s=2;D100, PLC side needs to be configured with no BCC calculation, including 0D0A end code +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 富士SPB的辅助类 + + + + + 将int数据转换成SPB可识别的标准的数据内容,例如 2转换为0200 , 200转换为0002 + + 等待转换的数据内容 + 转换之后的数据内容 + + + + 计算指令的和校验码 + + 指令 + 校验之后的信息 + + + + 创建一条读取的指令信息,需要指定一些参数,单次读取最大105个字 + + PLC的站号 + 地址信息 + 数据长度 + 是否成功的结果对象 + + + + 创建一条读取的指令信息,需要指定一些参数,单次读取最大105个字 + + PLC的站号 + 地址信息 + 数据长度 + 是否成功的结果对象 + + + + 创建一条读取多个地址的指令信息,需要指定一些参数,单次读取最大105个字 + + PLC的站号 + 地址信息 + 数据长度 + 是否位读取 + 是否成功的结果对象 + + + + 创建一条别入byte数据的指令信息,需要指定一些参数,按照字单位,单次写入最大103个字 + + 站号 + 地址 + 数组值 + 是否创建成功 + + + + 创建一条别入byte数据的指令信息,需要指定一些参数,按照字单位,单次写入最大103个字 + + 站号 + 地址 + 数组值 + 是否创建成功 + + + + 检查反馈的数据信息,是否包含了错误码,如果没有包含,则返回成功 + + 原始的报文返回 + 是否成功的结果对象 + + + + 根据错误码获取到真实的文本信息 + + 错误码 + 错误的文本描述 + + + + 批量读取PLC的数据,以字为单位,支持读取X,Y,L,M,D,TN,CN,TC,CC,R,W具体的地址范围需要根据PLC型号来确认,地址可以携带站号信息,例如:s=2;D100
+ Read PLC data in batches, in units of words. Supports reading X, Y, L, M, D, TN, CN, TC, CC, R, W. + The specific address range needs to be confirmed according to the PLC model, The address can carry station number information, for example: s=2;D100 +
+ PLC设备通信对象 + 当前的站号信息 + 地址信息 + 数据长度 + 读取结果信息 + + 单次读取的最大的字数为105,如果读取的字数超过这个值,请分批次读取。 + +
+ + + 批量写入PLC的数据,以字为单位,也就是说最少2个字节信息,支持读取X,Y,L,M,D,TN,CN,TC,CC,R具体的地址范围需要根据PLC型号来确认,地址可以携带站号信息,例如:s=2;D100
+ The data written to the PLC in batches, in units of words, that is, a minimum of 2 bytes of information. It supports reading X, Y, L, M, D, TN, CN, TC, CC, and R. + The specific address range needs to be based on PLC model to confirm, The address can carry station number information, for example: s=2;D100 +
+ PLC设备通信对象 + 当前的站号信息 + 地址信息,举例,D100,R200,TN100,CN200 + 数据值 + 是否写入成功 + + 单次写入的最大的字数为103个字,如果写入的数据超过这个长度,请分批次写入 + +
+ + + 批量读取PLC的Bool数据,以位为单位,支持读取X,Y,L,M,D,TN,CN,TC,CC,R,W,例如 M100, 如果是寄存器地址,可以使用D10.12来访问第10个字的12位,地址可以携带站号信息,例如:s=2;M100
+ Read PLC's Bool data in batches, in units of bits, support reading X, Y, L, M, D, TN, CN, TC, CC, R, W, such as M100, if it is a register address, + you can use D10. 12 to access the 12 bits of the 10th word, the address can carry station number information, for example: s=2;M100 +
+ PLC设备通信对象 + 当前的站号信息 + 地址信息,举例:M100, D10.12 + 读取的bool长度信息 + Bool[]的结果对象 +
+ + + 写入一个Bool值到一个地址里,地址可以是线圈地址,也可以是寄存器地址,例如:M100, D10.12,地址可以携带站号信息,例如:s=2;D10.12
+ Write a Bool value to an address. The address can be a coil address or a register address, for example: M100, D10.12. + The address can carry station number information, for example: s=2;D10.12 +
+ PLC设备通信对象 + 当前的站号信息 + 地址信息,举例:M100, D10.12 + 写入的bool值 + 是否写入成功的结果对象 +
+ + + + + + + + + + + + + + + 富士PLC的SPH通信协议,可以和富士PLC进行通信,默认CPU0,需要根据实际进行调整。
+ The SPH communication protocol of Fujifilm PLC can communicate with Fujifilm PLC, default CPU0, which needs to be adjusted according to the actual situation. +
+ + 地址支持 M1.0, M3.0, M10.0 以及I0, Q0 + +
+ + + 实例化一个默认的对象
+ Instantiate a default object +
+
+ + + 指定IP地址和端口号来实例化一个对象
+ Specify the IP address and port number to instantiate an object +
+ Ip地址 + 端口号 +
+ + + + + + 对于 CPU0-CPU7来说是CPU的站号,分为对应 0xFE-0xF7,对于P/PE link, FL-net是模块站号,分别对应0xF6-0xEF
+ CPU0 to CPU7: SX bus station No. of destination CPU (FEh to F7h); P/PE link, FL-net: SX bus station No. of destination module (F6H to EFH) +
+
+ + + 批量读取PLC的地址数据,长度单位为字。地址支持M1.1000,M3.1000,M10.1000,返回读取的原始字节数组。
+ Read PLC address data in batches, the length unit is words. The address supports M1.1000, M3.1000, M10.1000, + and returns the original byte array read. +
+ PLC的地址,支持M1.1000,M3.1000,M10.1000 + 读取的长度信息,按照字为单位 + 包含byte[]的原始字节数据内容 +
+ + + 批量写入字节数组到PLC的地址里,地址支持M1.1000,M3.1000,M10.1000,返回是否写入成功。
+ Batch write byte array to PLC address, the address supports M1.1000, M3.1000, M10.1000, + and return whether the writing is successful. +
+ PLC的地址,支持M1.1000,M3.1000,M10.1000 + 写入的原始字节数据 + 是否写入成功 +
+ + + 批量读取位数据的方法,需要传入位地址,读取的位长度,地址示例:M1.100.5,M3.1000.12,M10.1000.0
+ To read the bit data in batches, you need to pass in the bit address, the length of the read bit, address examples: M1.100.5, M3.1000.12, M10.1000.0 +
+ PLC的地址,示例:M1.100.5,M3.1000.12,M10.1000.0 + 读取的bool长度信息 + 包含bool[]的结果对象 +
+ + + 批量写入位数据的方法,需要传入位地址,等待写入的boo[]数据,地址示例:M1.100.5,M3.1000.12,M10.1000.0
+ To write bit data in batches, you need to pass in the bit address and wait for the boo[] data to be written. Examples of addresses: M1.100.5, M3.1000.12, M10.1000.0 +
+ + [警告] 由于协议没有提供位写入的命令,所有通过字写入间接实现,先读取字数据,修改中间的位,然后写入字数据,所以本质上不是安全的,确保相关的地址只有上位机可以写入。
+ [Warning] Since the protocol does not provide commands for bit writing, all are implemented indirectly through word writing. First read the word data, + modify the bits in the middle, and then write the word data, so it is inherently not safe. Make sure that the relevant address is only The host computer can write. +
+ PLC的地址,示例:M1.100.5,M3.1000.12,M10.1000.0 + 等待写入的bool数组 + 是否写入成功的结果对象 +
+ + + + + + + + + + + + + + + [Authorization] This command is used to start all the CPUs that exist in a configuration in a batch. + Each CPU is cold-started or warm-started,depending on its condition. If a CPU is already started up, + or if the key switch is set at "RUN" position, the CPU does not perform processing for startup, + which, however, does not result in an error, and a response is returned normally + + 是否启动成功 + + + + [Authorization] This command is used to initialize and start all the CPUs that exist in a configuration in a batch. Each CPU is cold-started. + If a CPU is already started up, or if the key switch is set at "RUN" position, the CPU does not perform processing for initialization + and startup, which, however, does not result in an error, and a response is returned normally. + + 是否启动成功 + + + + [Authorization] This command is used to stop all the CPUs that exist in a configuration in a batch. + If a CPU is already stopped, or if the key switch is set at "RUN" position, the CPU does not perform processing for stop, which, + however, does not result in an error, and a response is returned normally. + + 是否停止成功 + + + + [Authorization] This command is used to stop all the CPUs that exist in a configuration in a batch. + If a CPU is already stopped, or if the key switch is set at "RUN" position, the CPU does not perform processing for stop, which, + however, does not result in an error, and a response is returned normally. + + 是否复位成功 + + + + [Authorization] This command is used to start an arbitrary CPU existing in a configuration by specifying it. The CPU may be cold-started or + warm-started, depending on its condition. An error occurs if the CPU is already started. A target CPU is specified by a connection + mode and connection ID. + + 是否启动成功 + + + + [Authorization] This command is used to initialize and start an arbitrary CPU existing in a configuration by specifying it. The CPU is cold-started. + An error occurs if the CPU is already started or if the key switch is set at "RUN" or "STOP" position. A target CPU is specified by + a connection mode and connection ID. + + 是否启动成功 + + + + [Authorization] This command is used to stop an arbitrary CPU existing in a configuration by specifying it. An error occurs if the CPU is already + stopped or if the key switch is set at "RUN" or "STOP" position. A target CPU is specified by a connection mode and connection ID. + + 是否停止成功 + + + + [Authorization] This command is used to reset an arbitrary CPU existing in a configuration by specifying it. An error occurs if the key switch is + set at "RUN" or "STOP" position. A target CPU is specified by a connection mode and connection ID. + + 是否复位成功 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 根据错误代号获取详细的错误描述信息 + + 错误码 + 错误的描述文本 + + + + 构建读取数据的命令报文 + + 连接ID + 读取的PLC的地址 + 读取的长度信息,按照字为单位 + 构建成功的读取报文命令 + + + + 构建读取数据的命令报文 + + 连接ID + 读取的PLC的地址 + 读取的长度信息,按照字为单位 + 构建成功的读取报文命令 + + + + 构建写入数据的命令报文 + + 连接ID + 写入的PLC的地址 + 原始数据内容 + 报文信息 + + + + 从PLC返回的报文里解析出实际的数据内容,如果发送了错误,则返回失败信息 + + PLC返回的报文信息 + 是否成功的结果对象 + + + + 富士PLC的SPB协议,详细的地址信息见api文档说明,地址可以携带站号信息,例如:s=2;D100,PLC侧需要配置无BCC计算,包含0D0A结束码
+ Fuji PLC's SPB protocol. For detailed address information, see the api documentation, + The address can carry station number information, for example: s=2;D100, PLC side needs to be configured with no BCC calculation, including 0D0A end code +
+
+ + + 使用默认的构造方法实例化对象
+ Instantiate the object using the default constructor +
+
+ + + 使用指定的ip地址和端口来实例化一个对象
+ Instantiate an object with the specified IP address and port +
+ 设备的Ip地址 + 设备的端口号 +
+ + + + + + PLC的站号信息
+ PLC station number information +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 富士的SPB虚拟的PLC,线圈支持X,Y,M的读写,其中X只能远程读,寄存器支持D,R,W的读写操作。
+ Fuji's SPB virtual PLC, the coil supports X, Y, M read and write, + X can only be read remotely, and the register supports D, R, W read and write operations. +
+
+ + + 实例化一个富士SPB的网口和串口服务器,支持数据读写操作 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 富士的SPH虚拟的PLC,支持M1.0,M3.0,M10.0,I0,Q0的位与字的读写操作。
+
+
+ + + 实例化一个基于SPH协议的虚拟的富士PLC对象,可以用来和进行通信测试。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 振动传感器的加速度值 + + + + + X轴的实时加速度 + + + + + Y轴的实时加速度 + + + + + Z轴的实时加速度 + + + + + + + + Geniitek-VB31 型号的智能无线振动传感器,来自苏州捷杰传感器技术有限公司 + + + + + 使用指定的ip,端口来实例化一个默认的对象 + + Ip地址信息 + 端口号信息 + + + + 连接服务器,实例化客户端之后,至少要调用成功一次,如果返回失败,那些请过一段时间后重新调用本方法连接。
+ After connecting to the server, the client must be called at least once after instantiating the client. + If the return fails, please call this method to connect again after a period of time. +
+ 连接是否成功 +
+ + + 关闭Mqtt服务器的连接。
+ Close the connection to the Mqtt server. +
+
+ + + + + + 设置读取震动传感器的状态数据
+ Set to read the status data of the shock sensor +
+ 是否发送成功 +
+ + + 设置读取震动传感器的实时加速度
+ Set the real-time acceleration of the vibration sensor +
+ 是否发送成功 +
+ + + 设置当前的震动传感器的数据发送间隔为指定的时间,单位为秒
+ Set the current vibration sensor data transmission interval to the specified time in seconds +
+ 时间信息,单位为秒 + 是否发送成功 +
+ + + 震动传感器峰值数据事件委托
+ Shock sensor peak data event delegation +
+ 峰值信息 +
+ + + 接收到震动传感器峰值数据时触发
+ Triggered when peak data of vibration sensor is received +
+
+ + + 震动传感器实时数据事件委托
+ Vibration sensor real-time data event delegation +
+ 实际信息 +
+ + + 接收到震动传感器实时数据时触发
+ Triggered when real-time data from shock sensor is received +
+
+ + + 连接服务器成功的委托
+ Connection server successfully delegated +
+
+ + + 当客户端连接成功触发事件,就算是重新连接服务器后,也是会触发的
+ The event is triggered when the client is connected successfully, even after reconnecting to the server. +
+
+ + + 当网络发生异常的时候触发的事件,用户应该在事件里进行重连服务器 + + + + + 获取或设置当前客户端的连接超时时间,默认10,000毫秒,单位ms
+ Gets or sets the connection timeout of the current client. The default is 10,000 milliseconds. The unit is ms. +
+
+ + + 获取或设置当前的客户端假死超时检查时间,单位为秒,默认60秒,60秒内没有接收到传感器的数据,则强制重连。 + + + + + 当前设备的地址信息 + + + + + + + + 根据地址,命令,数据,创建向传感器发送的数据信息 + + 设备地址 + 命令 + 数据信息 + 原始的数据内容 + + + + 检查当前的数据是否XOR校验成功 + + 数据信息 + 校验结果 + + + + 完整的数据报文信息 + + + + + + + + + + + + + + 振动传感器的峰值数据类 + + + + + X轴的加速度,单位 m/s2 + + + + + Y轴的加速度,单位 m/s2 + + + + + Z轴的加速度,单位 m/s2 + + + + + X轴的速度,单位 mm/s + + + + + Y轴的速度,单位 mm/s + + + + + Z轴的速度,单位 mm/s + + + + + X轴的位置,单位 um + + + + + Y轴的位移,单位 um + + + + + Z轴的位移,单位 um + + + + + 温度,单位 摄氏度 + + + + + 电压,单位 伏特 + + + + + 数据的发送间隔,单位秒 + + + + + 短消息的报文内容 + + + + + + + + + + + + + + GE plc相关的辅助类对象 + + + + + 构建一个读取数据的报文信息,需要指定操作的数据代码,读取的参数信息
+ To construct a message information for reading data, you need to specify the data code of the operation and the parameter information to be read +
+ 消息号 + 操作代码 + 数据参数 + 包含是否成功的报文信息 +
+ + + 构建一个读取数据的报文命令,需要指定消息号,读取的 GE 地址信息
+ To construct a message command to read data, you need to specify the message number and read GE address information +
+ 消息号 + GE 的地址 + 包含是否成功的报文信息 +
+ + + 构建一个读取数据的报文命令,需要指定消息号,地址,长度,是否位读取,返回完整的报文信息。
+ To construct a message command to read data, you need to specify the message number, + address, length, whether to read in bits, and return the complete message information. +
+ 消息号 + 地址 + 读取的长度 + + 包含是否成功的报文对象 +
+ + + + + + 构建一个批量写入 byte 数组变量的报文,需要指定消息号,写入的地址,地址参照 说明。
+ To construct a message to be written into byte array variables in batches, + you need to specify the message number and write address. For the address, refer to the description of . +
+ 消息的序号 + 地址信息 + byte数组的原始数据 + 包含结果信息的报文内容 +
+ + + 构建一个批量写入 bool 数组变量的报文,需要指定消息号,写入的地址,地址参照 说明。
+ To construct a message to be written into bool array variables in batches, + you need to specify the message number and write address. For the address, refer to the description of . +
+ 消息的序号 + 地址信息 + bool数组 + 包含结果信息的报文内容 +
+ + + 从PLC返回的数据中,提取出实际的数据内容,最少6个字节的数据。超出实际的数据长度的部分没有任何意义。
+ From the data returned by the PLC, extract the actual data content, at least 6 bytes of data. The part beyond the actual data length has no meaning. +
+ PLC返回的数据信息 + 解析后的实际数据内容 +
+ + + 从实际的时间的字节数组里解析出C#格式的时间对象,这个时间可能是时区0的时间,需要自行转化本地时间。
+ Analyze the time object in C# format from the actual time byte array. + This time may be the time in time zone 0, and you need to convert the local time yourself. +
+ 字节数组 + 包含是否成功的结果对象 +
+ + + 从实际的时间的字节数组里解析出PLC的程序的名称。
+ Parse the name of the PLC program from the actual time byte array +
+ 字节数组 + 包含是否成功的结果对象 +
+ + + Ge(通用电气)集团的SRTP协议实现的客户端,支持 I,Q,M,T,SA,SB,SC,S,G 的位和字节读写,支持 AI,AQ,R 的字读写操作,支持读取PLC时间,程序名操作
+ The client implemented by Ge (General Electric) Group's SRTP protocol, supports I, Q, M, T, SA, SB, SC, S, G bit and byte read and write, + supports AI, AQ, R word read and write Operation, support reading PLC time, program name operation +
+ + PLC的端口号默认18245,其中读取R,AI,AQ寄存器的原始字节时,传入的长度参数为字节长度。
+ 对其他寄存器而言,M1-M8的位读取,相当于 M1的字节读取。写入也是同理。 +
+ + 对于 AI,AQ,R 类型的数据来说,底层是以字为单位的,但是调用 来读取原始数据时,需要传入2被的字长度,对于其他方法不影响 + + + + 假设起始地址为R1,R1存储了温度,100.6℃值为1006,R2存储了压力,1.23Mpa值为123,R3-R4存储了产量计数,读取如下: + + 以下是读取不同类型数据的示例 + + +
+ + + 实例化一个默认的对象
+ Instantiate a default object +
+
+ + + 指定IP地址和端口号来实例化一个对象
+ Specify the IP address and port number to instantiate an object +
+ Ip地址 + 端口号 +
+ + + + + + + + + + + + 批量读取字节数组信息,需要指定地址和长度,返回原始的字节数组,支持 I,Q,M,T,SA,SB,SC,S,G 的位和字节读写,支持 AI,AQ,R 的字读写操作,地址示例:R1,M1
+ Batch read byte array information, need to specify the address and length, return the original byte array. + Support I, Q, M, T, SA, SB, SC, S, G bit and byte read and write, support AI, AQ, R word read and write operations, address examples: R1, M1 +
+ + 其中读取R,AI,AQ寄存器的原始字节时,传入的长度参数为字节长度。长度为10,返回10个字节数组信息,如果返回长度不满6个字节的,一律返回6个字节的数据 + + 数据地址 + 数据长度 + 带有成功标识的byte[]数组 +
+ + + + + + 根据指定的地址来读取一个字节的数据,按照字节为单位,例如 M1 字节,就是指 M1-M8 位组成的字节,M2 字节就是 M9-M16 组成的字节。不支持对 AI,AQ,R 寄存器的字节读取
+ A byte of data is read according to the specified address, and the unit is byte. For example, M1 byte refers to a byte composed of M1-M8 bits, + and M2 byte is a byte composed of M9-M16. Does not support byte reading of AI, AQ, R registers +
+ 地址信息 + 带有成功标识的 数据 +
+ + + 向PLC中写入byte数据,返回是否写入成功
+ Write byte data to PLC and return whether the writing is successful +
+ 起始地址,格式为I100,M100,Q100,DB20.100 -> Starting address, formatted as I100,mM100,Q100,DB20.100 + byte数据 -> Byte data + 是否写入成功的结果对象 -> Whether to write a successful result object +
+ + + 按照位为单位,批量从指定的地址里读取 bool 数组数据,不支持 AI,AQ,R 地址类型,地址比如从1开始,例如 I1,Q1,M1,T1,SA1,SB1,SC1,S1,G1
+ In units of bits, read bool array data from the specified address in batches. AI, AQ, + R address types are not supported. For example, the address starts from 1, such as I1, Q1, M1, T1, SA1, SB1, SC1, S1, G1 +
+ PLC的地址信息,例如 M1, G1 + 读取的长度信息,按照位为单位 + 包含是否读取成功的bool数组 +
+ + + 按照位为单位,批量写入 bool 数组到指定的地址里,不支持 AI,AQ,R 地址类型,地址比如从1开始,例如 I1,Q1,M1,T1,SA1,SB1,SC1,S1,G1
+ In units of bits, write bool arrays in batches to the specified addresses. AI, AQ, and R address types are not supported. For example, + the address starts from 1, such as I1, Q1, M1, T1, SA1, SB1, SC1, S1, G1 +
+ PLC的地址信息,例如 M1, G1 + bool 数组 + 是否写入成功的结果对象 +
+ + + + + + + + + + + + + + + + + + + + + [商业授权] 读取PLC当前的时间,这个时间可能是不包含时区的,需要自己转换成本地的时间。
+ [Authorization] Read the current time of the PLC, this time may not include the time zone, you need to convert the local time yourself. +
+ 包含是否成功的时间信息 +
+ + + [商业授权] 读取PLC当前的程序的名称
+ [Authorization] Read the name of the current program of the PLC +
+ 包含是否成的程序名称信息 +
+ + + + + + + + + + + + Ge的SRTP协议实现的虚拟PLC,支持I,Q,M,T,SA,SB,SC,S,G的位和字节读写,支持AI,AQ,R的字读写操作,支持读取当前时间及程序名称。
+ Virtual PLC implemented by Ge's SRTP protocol, supports bit and byte read and write of I, Q, M, T, SA, SB, SC, S, G, + supports word read and write operations of AI, AQ, R, and supports reading Current time and program name. +
+ + 实例化之后,直接调用 方法就可以通信及交互,所有的地址都是从1开始的,地址示例:M1,M100, R1, + 具体的用法参考 HslCommunicationDemo 相关界面的源代码。 + + + 地址的示例,参考 相关的示例说明 + +
+ + + 实例化一个默认的对象
+ Instantiate a default object +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 身份证的信息类 + + + + + 名字 + + + + + 性别 + + + + + 身份证号 + + + + + 民族 + + + + + 生日 + + + + + 地址 + + + + + 发证机关 + + + + + 有效期日期的起始日期 + + + + + 有效期日期的结束日期 + + + + + 头像信息 + + + + + 返回表示当前对象的字符串 + + 字符串 + + + + 基于SAM协议的串口通信类,支持读取身份证的数据信息,详细参见API文档
+ Network class implemented by Tcp based on the SAM protocol, which supports reading ID card data information, + see API documentation for details +
+ + 在使用之前需要实例化当前的对象,然后根据实际的情况填写好串口的信息,否则连接不上去。 + + 在实际的读取,我们一般放在后台进行循环扫描的操作,参见下面的代码 + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + 将指令进行打包成可以发送的数据对象 + + 命令信息 + 字节数组 + + + + 根据SAM的实际的指令,来生成实际的指令信息 + + 命令码 + 参数信息 + 数据内容 + 字符串的结果信息 + + + + 检查当前的接收数据信息是否一条完整的数据信息 + + 输入的信息 + 是否接收完成 + + + + 检查当前的指令是否是正确的 + + 输入的指令信息 + 是否校验成功 + + + + 提炼安全的模块数据信息 + + 数据 + 结果对象 + + + + 从数据中提取出真实的身份证信息 + + 原始数据内容 + 包含结果对象的身份证数据 + + + + 根据民族的代号来获取到民族的文本描述信息 + + 民族代码 + 民族的文本信息 + + + + 枚举当前的所有的民族信息,共计五十六个民族 + + 枚举信息 + + + + 获取错误的文本信息 + + 错误号 + 错误信息 + + + + 基于SAM协议的Tcp实现的网络类,支持读取身份证的数据信息,通过透传的形式实现,除了初始化和串口类不一致,调用方法是几乎一模一样的,详细参见API文档
+ The network class implemented by Tcp based on the SAM protocol supports reading ID card data information and is implemented in the form of transparent transmission. + Except for the inconsistency between the initialization and the serial port class, the calling method is almost the same. + See the API documentation for details +
+ + 在使用之前需要实例化当前的对象,然后根据实际的情况填写好串口的信息,否则连接不上去。 + + 在实际的读取,我们一般放在后台进行循环扫描的操作,参见下面的代码 + + 当然也支持全异步的操作了,就是方法的名称改改 + + + +
+ + + 实例化一个默认的对象
+ Instantiate a default object +
+
+ + + 通过指定的ip地址以及端口来实例化对象
+ Instantiate the object with the specified IP address and port +
+ ip地址 + 端口号 +
+ + + + + + 读取身份证设备的安全模块号
+ Read the security module number of the ID device +
+ 结果数据内容 +
+ + + 检测安全模块状态
+ Detecting Security Module Status +
+ 返回是否检测成功 +
+ + + 寻找卡片,并返回是否成功
+ Find cards and return success +
+ 是否寻找成功 +
+ + + 选择卡片,并返回是否成功
+ Select card and return success +
+ 是否寻找成功 +
+ + + 读取卡片,如果成功的话,就返回身份证的所有的信息
+ Read the card, if successful, return all the information of the ID cards +
+ 是否寻找成功 +
+ + + + + + + + + + + + + + + + + + + + + 汇川PLC的辅助类,提供一些地址解析的方法
+ Auxiliary class of Yaskawa robot, providing some methods of address resolution +
+
+ + + 按照字节读取汇川M地址的数据,地址示例: MB100,MB101,需要注意的是,MB100 及 MB101 的地址是 MW50 的数据。
+ Read the data of Inovance M address according to the byte, address example: MB100, MB101, it should be noted that the addresses of MB100 and MB101 are the data of MW50. +
+ 汇川的PLC对象 + 地址信息 + 读取的结果数据 +
+ + + + + + 根据汇川PLC的地址,解析出转换后的modbus协议信息,适用AM,H3U,H5U系列的PLC
+ According to the address of Inovance PLC, analyze the converted modbus protocol information, which is suitable for AM, H3U, H5U series PLC +
+ PLC的系列 + 汇川plc的地址信息 + 原始的对应的modbus信息 + Modbus格式的地址 +
+ + + + + + + + + + + + 汇川的串口通信协议,A适用于AM400、 AM400_800、 AC800、H3U, XP, H5U 等系列底层走的是MODBUS-RTU协议,地址说明参见标记
+ Huichuan's serial communication protocol is applicable to AM400, AM400_800, AC800 and other series. The bottom layer is MODBUS-RTU protocol. For the address description, please refer to the mark +
+ + AM400_800 的元件有 Q 区,I 区,M 区这三种,分别都可以按位,按字节,按字和按双字进行访问,在本组件的条件下,仅支持按照位,字访问。
+ 位地址支持 Q, I, M 地址类型,字地址支持 SM, SD,支持对字地址的位访问,例如 ReadBool("SD0.5"); + H3U 系列控制器支持 M/SM/S/T/C/X/Y 等 bit 型变量(也称线圈) 的访问、 D/SD/R/T/C 等 word 型变量的访问;
+ H5U 系列控制器支持 M/B/S/X/Y 等 bit 型变量(也称线圈) 的访问、 D/R 等 word 型变量的访问;内部 W 元件,不支持通信访问。
+
+
+ + + 实例化一个默认的对象 + + + + + 指定服务器地址,端口号,客户端自己的站号来初始化
+ Specify the server address, port number, and client's own station number to initialize +
+ 客户端自身的站号 +
+ + + 指定服务器地址,端口号,客户端自己的站号来初始化
+ Specify the server address, port number, and client's own station number to initialize +
+ PLC的系列选择 + 客户端自身的站号 +
+ + + 获取或设置汇川的系列,默认为AM系列 + + + + + + + + + + + + + + + + + 汇川的串口转网口通信协议,A适用于AM400、 AM400_800、 AC800、H3U, XP, H5U 等系列底层走的是MODBUS-RTU协议,地址说明参见标记
+ Huichuan's serial communication protocol is applicable to AM400, AM400_800, AC800 and other series. The bottom layer is MODBUS-RTU protocol. For the address description, please refer to the mark +
+ + AM400_800 的元件有 Q 区,I 区,M 区这三种,分别都可以按位,按字节,按字和按双字进行访问,在本组件的条件下,仅支持按照位,字访问。
+ 位地址支持 Q, I, M 地址类型,字地址支持 SM, SD,支持对字地址的位访问,例如 ReadBool("SD0.5");
+ H3U 系列控制器支持 M/SM/S/T/C/X/Y 等 bit 型变量(也称线圈) 的访问、 D/SD/R/T/C 等 word 型变量的访问;
+ H5U 系列控制器支持 M/B/S/X/Y 等 bit 型变量(也称线圈) 的访问、 D/R 等 word 型变量的访问;内部 W 元件,不支持通信访问。
+
+
+ + + 实例化一个默认的对象 + + + + + 通过指定站号,ip地址,端口号来实例化一个新的对象 + + Ip地址 + 端口号 + 站号信息 + + + + 通过指定站号,IP地址,端口以及PLC的系列来实例化一个新的对象
+ Instantiate a new object by specifying the station number and PLC series +
+ PLC的系列 + Ip地址 + 端口号 + 站号信息 +
+ + + 获取或设置汇川的系列,默认为AM系列 + + + + + + + + + + + + + + + + + 汇川的系列枚举信息 + + + + + 适用于AM400、 AM400_800、 AC800 等系列 + + + + + 适用于H3U, XP 等系列 + + + + + 适用于H5U 系列 + + + + + 汇川的网口通信协议,A适用于AM400、 AM400_800、 AC800、H3U, XP, H5U 等系列底层走的是MODBUS-TCP协议,地址说明参见标记
+ Huichuan's serial communication protocol is applicable to AM400, AM400_800, AC800 and other series. The bottom layer is MODBUS-RTU protocol. For the address description, please refer to the mark +
+ + AM400_800 的元件有 Q 区,I 区,M 区这三种,分别都可以按位,按字节,按字和按双字进行访问,在本组件的条件下,仅支持按照位,字访问。
+ 位地址支持 Q, I, M 地址类型,字地址支持 SM, SD,支持对字地址的位访问,例如 ReadBool("SD0.5"); + H3U 系列控制器支持 M/SM/S/T/C/X/Y 等 bit 型变量(也称线圈) 的访问、 D/SD/R/T/C 等 word 型变量的访问;
+ H5U 系列控制器支持 M/B/S/X/Y 等 bit 型变量(也称线圈) 的访问、 D/R 等 word 型变量的访问;内部 W 元件,不支持通信访问。
+
+
+ + + 实例化一个默认的对象 + + + + + 通过指定站号,ip地址,端口号来实例化一个新的对象 + + Ip地址 + 端口号 + 站号信息 + + + + 通过指定站号,IP地址,端口以及PLC的系列来实例化一个新的对象
+ Instantiate a new object by specifying the station number and PLC series +
+ PLC的系列 + Ip地址 + 端口号 + 站号信息 +
+ + + + + + + + + 获取或设置汇川的系列,默认为AM系列 + + + + + + + + + + + 基恩士的数字传感器的以太网模块,可以同时连接并读取多个传感器模块的功能代码 + + + + + 实例化基恩士的Qna兼容3E帧协议的通讯对象
+ Instantiate Keyence Qna compatible 3E frame protocol communication object +
+
+ + + 指定ip地址及端口号来实例化一个基恩士的Qna兼容3E帧协议的通讯对象
+ Specify an IP address and port number to instantiate a Keynes Qna compatible 3E frame protocol communication object +
+ PLC的Ip地址 + PLC的端口 +
+ + + + + + + + + 使用M0命令读取所有的传感器的数据信息 + + 命令信息 + 是否成功的结果对象 + + + + + + + 坚持设备的返回的数据,并校验是否成功 + + 设备的返回数据信息 + 是否成功的结果对象 + + + + 基恩士SR2000系列扫码设备的通用接口 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Keyence PLC的数据类型,此处包含了几个常用的类型 + + + + + 如果您清楚类型代号,可以根据值进行扩展 + + 数据类型的代号 + 0或1,默认为0 + ASCII格式的类型信息 + 指示地址的多少进制的,10或是16 + + + + 类型的代号值 + + + + + 数据的类型,0代表按字,1代表按位 + + + + + 当以ASCII格式通讯时的类型描述 + + + + + 指示地址是10进制,还是16进制的 + + + + + X输入继电器 + + + + + Y输出继电器 + + + + + 链接继电器 + + + + + 内部辅助继电器 + + + + + 锁存继电器 + + + + + 控制继电器 + + + + + 控制存储器 + + + + + 数据存储器 + + + + + 文件寄存器 + + + + + 文件寄存器 + + + + + 链路寄存器 + + + + + 计时器(当前值) + + + + + 计时器(接点) + + + + + 计数器(当前值) + + + + + 计数器(接点) + + + + + 基恩士PLC的数据通信类,使用QnA兼容3E帧的通信协议实现,使用ASCII的格式,地址格式需要进行转换成三菱的格式,详细参照备注说明
+ Keyence PLC's data communication class is implemented using QnA compatible 3E frame communication protocol. + It uses ascii format. The address format needs to be converted to Mitsubishi format. +
+ + + +
+ + + + + + + + + + + + + + + 基恩士PLC的数据通信类,使用QnA兼容3E帧的通信协议实现,使用二进制的格式,地址同时支持三菱的地址格式及基恩士自身的地址格式,详细参照备注说明
+ The data communication class of KEYENCE PLC is implemented using a QnA-compatible 3E frame communication protocol, using binary format, + and the address supports both Mitsubishi's address format and Keyence's own address format, please refer to the remarks for details +
+ + 地址支持 R015, MR015, LR015, CR015, CM0, DM100, EM100, FM100, ZF100, W1A0, TN0, TS0, CN0, CS0, 具体范围参考:http://api.hslcommunication.cn/html/04bd2a21-7ab0-2fb9-f7f1-e0f0ecaf9227.htm + +
+ + + 实例化基恩士的Qna兼容3E帧协议的通讯对象
+ Instantiate Keyence Qna compatible 3E frame protocol communication object +
+
+ + + 指定ip地址及端口号来实例化一个基恩士的Qna兼容3E帧协议的通讯对象
+ Specify an IP address and port number to instantiate a Keynes Qna compatible 3E frame protocol communication object +
+ PLC的Ip地址 + PLC的端口 +
+ + + + + + + + + KeyenceNano的基本辅助方法 + + + + + 连接PLC的命令报文
+ Command message to connect to PLC +
+ 当前PLC的站号信息 + 是否启动站号命令 +
+ + + 断开PLC连接的命令报文
+ Command message to disconnect PLC +
+ 当前PLC的站号信息 + 是否启动站号命令 +
+ + + 获取当前的地址类型是字数据的倍数关系 + + 地址的类型 + 倍数关系 + + + + 建立读取PLC数据的指令,需要传入地址数据,以及读取的长度,地址示例参照类的说明文档
+ To create a command to read PLC data, you need to pass in the address data, and the length of the read. For an example of the address, refer to the class documentation +
+ 软元件地址 + 读取长度 + 是否建立成功 +
+ + + + + + 建立写入PLC数据的指令,需要传入地址数据,以及写入的数据信息,地址示例参照类的说明文档
+ To create a command to write PLC data, you need to pass in the address data and the written data information. For an example of the address, refer to the class documentation +
+ 软元件地址 + 转换后的数据 + 是否成功的信息 +
+ + + 构建写入扩展单元缓冲寄存器的报文命令,需要传入单元编号,地址,写入的数据,实际写入的数据格式才有无符号的方式
+ To construct a message command to write to the buffer register of the expansion unit, the unit number, address, + and data to be written need to be passed in, and the format of the actually written data is unsigned. +
+ 单元编号0~48 + 地址0~32767 + 写入的数据信息,单次交互最大256个字 + 包含是否成功的报文对象 +
+ + + 建立写入bool数据的指令,针对地址类型为 R,CR,MR,LR
+ Create instructions to write bool data, address type is R, CR, MR, LR +
+ 软元件地址 + 转换后的数据 + 是否成功的信息 +
+ + + 批量写入数据位到plc地址,针对地址格式为 R,B,CR,MR,LR,VB
+ Write data bits in batches to the plc address, and the address format is R, B, CR, MR, LR, VB +
+ PLC的地址 + 等待写入的bool数组 + 写入bool数组的命令报文 +
+ + + 校验读取返回数据状态,主要返回的第一个字节是不是E
+ Check the status of the data returned from reading, whether the first byte returned is E +
+ 反馈信息 + 是否成功的信息 +
+ + + 校验写入返回数据状态,检测返回的数据是不是OK
+ Verify the status of the returned data written and check whether the returned data is OK +
+ 反馈信息 + 是否成功的信息 +
+ + + 从PLC反馈的数据进行提炼Bool操作
+ Refine Bool operation from data fed back from PLC +
+ 地址的数据类型 + PLC反馈的真实数据 + 数据提炼后的真实数据 +
+ + + 从PLC反馈的数据进行提炼操作
+ Refining operation from data fed back from PLC +
+ 地址的数据类型 + PLC反馈的真实数据 + 数据提炼后的真实数据 +
+ + + + 地址支持读取扩展单元缓冲存储器的数据,例如读取扩展单元号1,地址100的数据,地址写为 unit=1;100
+ The address supports reading the data in the buffer memory of the expansion unit, such as reading the data of the expansion unit number 1, address 100, and the address is written as unit=1;100 +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [商业授权] 查询PLC的型号信息
+ [Authorization] Query PLC model information +
+ PLC通信对象 + 包含型号的结果对象 +
+ + + + + + [商业授权] 读取当前PLC的模式,如果是0,代表 PROG模式或者梯形图未登录,如果为1,代表RUN模式
+ [Authorization] Read the current PLC mode, if it is 0, it means PROG mode or the ladder diagram is not registered, if it is 1, it means RUN mode +
+ PLC通信对象 + 包含模式的结果对象 +
+ + + + + + [商业授权] 设置PLC的时间
+ [Authorization] Set PLC time +
+ PLC通信对象 + 时间数据 + 是否设置成功 +
+ + + + + + [商业授权] 读取指定软元件的注释信息
+ [Authorization] Read the comment information of the specified device +
+ PLC通信对象 + 软元件的地址 + 软元件的注释信息 +
+ + + + + + [商业授权] 从扩展单元缓冲存储器连续读取指定个数的数据,单位为字
+ [Authorization] Continuously read the specified number of data from the expansion unit buffer memory, the unit is word +
+ PLC的通信对象 + 单元编号 + 偏移地址 + 读取的长度,单位为字 + 包含是否成功的原始字节数组 +
+ + + + + + [商业授权] 将原始字节数据写入到扩展的缓冲存储器,需要指定单元编号,偏移地址,写入的数据
+ [Authorization] To write the original byte data to the extended buffer memory, you need to specify the unit number, offset address, and write data +
+ PLC通信对象信息 + 单元编号 + 偏移地址 + 等待写入的原始字节数据 + 是否写入成功的结果对象 +
+ + + + + + 基恩士KV上位链路串口通信的对象,适用于Nano系列串口数据,KV1000以及L20V通信模块,地址格式参考api文档
+ Keyence KV upper link serial communication object, suitable for Nano series serial data, and L20V communication module, please refer to api document for address format +
+ + 位读写的数据类型为 R,B,MR,LR,CR,VB,以及读定时器的计数器的触点,字读写的数据类型为 DM,EM,FM,ZF,W,TM,Z,AT,CM,VM 双字读写为T,C,TC,CC,TS,CS。如果想要读写扩展的缓存器,地址示例:unit=2;1000 前面的是单元编号,后面的是偏移地址
+ 注意:在端口 2 以多分支连接 KV-L21V 时,请一定加上站号。在将端口 2 设定为使用 RS-422A、 RS-485 时, KV-L21V 即使接收本站以外的带站号的指令,也将变为无应答,不返回响应消息。 +
+
+ + + 实例化基恩士的串口协议的通讯对象
+ Instantiate the communication object of Keyence's serial protocol +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 基恩士KV上位链路协议的通信对象,适用于KV5000/5500/3000,KV1000,KV700,以及L20V通信模块,本类是基于tcp通信
+ The communication object of KEYENCE KV upper link protocol is suitable for KV5000/5500/3000, KV1000, KV700, and L20V communication modules. This type is based on tcp communication +
+ + 位读写的数据类型为 R,B,MR,LR,CR,VB,以及读定时器的计数器的触点,字读写的数据类型为 DM,EM,FM,ZF,W,TM,Z,AT,CM,VM 双字读写为T,C,TC,CC,TS,CS。如果想要读写扩展的缓存器,地址示例:unit=2;1000 前面的是单元编号,后面的是偏移地址
+ 注意:在端口 2 以多分支连接 KV-L21V 时,请一定加上站号。在将端口 2 设定为使用 RS-422A、 RS-485 时, KV-L21V 即使接收本站以外的带站号的指令,也将变为无应答,不返回响应消息。 +
+
+ + + 实例化一个默认的对象
+ Instantiate a default object +
+
+ + + 使用指定的ip地址和端口号来初始化对象
+ Initialize the object with the specified IP address and port number +
+ Ip地址数据 + 端口号 +
+ + + + + + + + + + + + + + + + + + 获取或设置当前的站号信息,在RS232连接模式下,设置为0,如果是RS485/RS422连接下,必须设置正确的站号
+ Get or set the current station number information. In RS232 connection mode, set it to 0. + If it is RS485/RS422 connection, you must set the correct station number. +
+
+ + + 获取或设置当前是否启用站号信息,当不启动站号时,在连接和断开的时候,将不使用站号报文。
+ Get or set whether the station number information is currently enabled or not. + When the station number is not activated, the station number message will not be used when connecting and disconnecting. +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 基恩士的上位链路协议的虚拟服务器 + + + + + 实例化一个基于上位链路协议的虚拟的基恩士PLC对象,可以用来和进行通信测试。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 基恩士PLC的各种系列选择 + + + + + KV5500系列 + + + + + KV5000系列 + + + + + KV3000系列 + + + + + KV1000系列 + + + + + KV700系列 + + + + + 当前SR2000的辅助函数 + + + + + 读取条码信息,返回最终读取的条码数据
+ Read the barcode information and return the finally read barcode data +
+ 核心交互的方法 + 条码信息 +
+ + + 复位命令,响应后,进行复位动作。
+ Reset command, after responding, reset action. +
+ 核心交互的方法 + 返回是否成功的结果对象 +
+ + + 打开指示灯
+ Turn on the indicator +
+ 核心交互的方法 + 返回是否成功的结果对象 +
+ + + 关闭指示灯
+ Turn off the indicator +
+ 核心交互的方法 + 返回是否成功的结果对象 +
+ + + 读取基恩士的版本
+ Read Keyence's version +
+ 核心交互的方法 + 版本信息 +
+ + + 读取基恩士的命令状态,none:不处理;wait:等待设置反映;update:正在更新
+ Read the command status of Keyence, none: do not process; wait: wait for the setting to reflect; update: update +
+ 核心交互的方法 + 返回是否成功的结果对象 +
+ + + 读取基恩士的错误状态
+ Read the error status of Keyence +
+ 核心交互的方法 + 返回是否成功的结果对象 +
+ + + 读取IN端子的状况,需要传入哪个IN端子,返回是否通断
+ Read the status of the IN terminal, which IN terminal needs to be passed in, and return whether it is on or off +
+ 端子的信息 + 核心交互的方法 + 返回是否成功的结果对象 +
+ + + 设置OUT端子的使能,需要传入哪个OUT端子,返回是否设置成功!
+ Set the enable of the OUT terminal, which OUT terminal needs to be passed in, and return whether the setting is successful! +
+ 端子的索引,1,2,3 + 是否通断 + 核心交互的方法 + 返回是否成功的结果对象 +
+ + + 读取扫码器的扫码记录,返回数组数据,分别是成功次数,失败次数,ERROR次数,稳定次数,时机输入次数
+ Read the scan code record of the scanner and return the array data, which are the number of successes, failures, ERRORs, stable times, and timing input times. +
+ 核心交互的方法 + 返回是否成功的结果对象 +
+ + + 锁定扫码设备
+ Lock scanning device +
+ 核心交互的方法 + 返回是否成功的结果对象 +
+ + + 解除锁定的扫码设备
+ Unlock Scanning Device +
+ 核心交互的方法 + 返回是否成功的结果对象 +
+ + + 读取自定义的命令,例如LON,如果是包含其他参数的,比如打开OUT端子,OUTON,1
+ Read custom commands, such as LON, if it contains other parameters, such as open OUT terminal, OUTON,1 +
+ 自定义的命令 + 核心的数据交互方法 + 返回是否成功的结果对象 +
+ + + 获取操作代码包含的错误文本信息
+ Get the error text information contained in the operation code +
+ 错误代码 + 真是的错误信息 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 基恩士的SR2000的扫码设备,可以进行简单的交互 + + + 当使用 "LON","LOFF","PRON","PROFF" 命令时,在发送时和发生错误时,将不会收到扫码设备的回发命令,而是输出读取结果。 + 如果也希望获取上述命令的响应时,请在以下位置进行设置。[设置列表]-[其他]-"指定基本命令的响应字符串" + + + + + 实例化基恩士的SR2000的扫码设备通讯对象
+ Instantiate keyence's SR2000 scan code device communication object +
+
+ + + 指定ip地址及端口号来实例化一个基恩士的SR2000的扫码设备通讯对象
+ Specify the ip address and port number to instantiate a keyence SR2000 scan code device communication object +
+ PLC的Ip地址 + PLC的端口 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Knx协议 + + + + + 返回数据的委托 + + + + + + 返回需要写入KNX总线的应答报文(应答数据) + + + + + 返回需要写入的KNX系统的报文(写入数据) + + + + + 获取数据的委托 + + + + + + + + 返回从knx系统得到的数据 + + + + + 序号计数 + + + + + 通道 + + + + + 连接状态 + + + + + 关闭KNX连接 + + 通道号 + 本机IP + + + + + 返回握手报文 + + 本机ip地址 + + + + + KNX报文解析 + + + + + + 写入数据到KNX系统 + + 地址 + 长度 + 数据 + + + + 从KNX获取数据 + + + + + + 连接保持(每隔1s发送一次到设备) + + + + + + 暂时没有注释 + + + + + + + + 返回连接状态 + + + + + 从握手回复报文获取通道号 + + + + + + 解析控制包头和CEMI + + + + + 具体解析CEMI + + + + + Knx驱动,具体的用法参照demo + + + 感谢上海NULL提供的技术支持 + + + + + 实例化一个默认的对象 + + + + + 通道号(由设备发来) + + + + + 远程ip地址 + + + + + 本机IP地址 + + + + + 系统的日志信息 + + + + + 当前的状态是否连接中 + + + + + 通信指令类 + + + + + 和KNX网络进行握手并开始监听 + + + + + 保持KNX连接 + + + + + 关闭连接 + + + + + 将报文写入KNX系统 + + 地址 + 长度 + 数据 + + + + 读取指定KNX组地址 + + 地址 + + + + Cnet的辅助类 + + + + + 根据错误号,获取到真实的错误描述信息
+ According to the error number, get the real error description information +
+ 错误号 + 真实的错误描述信息 +
+ + + + + + 从输入的地址里解析出真实的可以直接放到协议的地址信息,如果是X的地址,自动转换带小数点的表示方式到位地址,如果是其他类型地址,则一律统一转化为字节为单位的地址
+ The real address information that can be directly put into the protocol is parsed from the input address. If it is the address of X, + it will automatically convert the representation with a decimal point to the address. If it is an address of other types, it will be uniformly converted into a unit of bytes. address +
+ 输入的起始偏移地址 + 是否转换为bool地址 + analysis result +
+ + + 往现有的命令数据中增加BCC的内容 + + 现有的命令 + + + + reading address Type of ReadByte + + plc station + address, for example: M100, D100, DW100 + read length + command bytes + + + + + + + Multi reading address Type of Read Individual + + plc station + address, for example: MX100, PX100 + + + + + build read command. + + station + start address + address length + command + + + + write data to address Type of ReadByte + + plc station + address, for example: M100, D100, DW100 + source value + command bytes + + + + write data to address Type of One + + plc station + address, for example: M100, D100, DW100 + source value + command bytes + + + + write data to address Type of ReadByte + + plc station + address, for example: M100, D100, DW100 + source value + command bytes + + + + 从PLC的指定地址读取原始的字节数据信息,地址示例:MB100, MW100, MD100, 如果输入了M100等同于MB100
+ Read the original byte data information from the designated address of the PLC. + Examples of addresses: MB100, MW100, MD100, if the input M100 is equivalent to MB100 +
+ + 地址类型支持 P,M,L,K,F,T,C,D,R,I,Q,W, 支持携带站号的形式,例如 s=2;MW100 + + PLC通信对象 + 站号信息 + PLC的地址信息,例如 M100, MB100, MW100, MD100 + 读取的长度信息 + 返回是否读取成功的结果对象 +
+ + + 从PLC设备读取多个地址的数据信息,返回连续的字节数组,需要按照实际情况进行按顺序解析。
+ Read the data information of multiple addresses from the PLC device and return a continuous byte array, which needs to be parsed in order according to the actual situation. +
+ 按照每16个地址长度进行自动的切割,支持任意的多的长度地址 + PLC通信对象 + 站号信息 + PLC的地址信息,例如 M100, MB100, MW100, MD100 + 结果对象数据 +
+ + + 将原始数据写入到PLC的指定的地址里,地址示例:MB100, MW100, MD100, 如果输入了M100等同于MB100
+ Write the original data to the designated address of the PLC. + Examples of addresses: MB100, MW100, MD100, if input M100 is equivalent to MB100 +
+ PLC通信对象 + 站号信息 + PLC的地址信息,例如 M100, MB100, MW100, MD100 + 等待写入的原始数据内容 + 是否写入成功 +
+ + + 从PLC的指定地址读取原始的位数据信息,地址示例:MX100, MX10A
+ Read the original bool data information from the designated address of the PLC. + Examples of addresses: MX100, MX10A +
+ + 地址类型支持 P,M,L,K,F,T,C,D,R,I,Q,W, 支持携带站号的形式,例如 s=2;MX100 + + PLC通信对象 + 站号信息 + PLC的地址信息,例如 MX100, MX10A + 返回是否读取成功的结果对象 +
+ + + 从PLC的指定地址读取原始的位数据信息,地址示例:MB100.0, MW100.0
+ Read the original bool data information from the designated address of the PLC. + Examples of addresses: MB100.0, MW100.0 +
+ + 地址类型支持 P,M,L,K,F,T,C,D,R,I,Q,W, 支持携带站号的形式,例如 s=2;MB100.0 + + PLC通信对象 + 站号信息 + PLC的地址信息,例如 MB100.0, MW100.0 + 读取的长度信息 + 返回是否读取成功的结果对象 +
+ + + 将bool数据写入到PLC的指定的地址里,地址示例:MX100, MX10A
+ Write the bool data to the designated address of the PLC. Examples of addresses: MX100, MX10A +
+ + 地址类型支持 P,M,L,K,F,T,C,D,R,I,Q,W, 支持携带站号的形式,例如 s=2;MX100 + + PLC通信对象 + 站号信息 + PLC的地址信息,例如 MX100, MX10A + bool值信息 + 返回是否读取成功的结果对象 +
+ + + + + + + + + + + + + + + + + + + + + It is determined to be the XGK/I/R series through a reserved area + + + + + Cpu status + + + + + 运行中 + + + + + 运行停止 + + + + + 错误状态 + + + + + 调试模式 + + + + + using FlagBit in Marker for Byte
+ M0.0=1;M0.1=2;M0.2=4;M0.3=8;==========================>M0.7=128 +
+
+ + 입출력(Bit) + + + 보조릴레이(Bit) + + + 링크릴레이(Bit) + + + Keep릴레이(Bit) + + + 특수릴레이(Bit) + + + 타이머(현재값)(Word) + + + 카운터(현재값)(Word) + + + 통신 데이터레지스터(Word) + + + 파일 레지스터(Word) + + + 파일 레지스터(Word) + + + 파일 레지스터(Word) + + + 입출력(Bit) + + + 보조릴레이(Bit) + + + 링크릴레이(Bit) + + + Keep릴레이(Bit) + + + 특수릴레이(Bit) + + + 타이머(현재값)(Word) + + + 카운터(현재값)(Word) + + + 데이터레지스터(Word) + + + 통신 데이터레지스터(Word) + + + 파일 레지스터(Word) + + + 파일 레지스터(Word) + + + 파일 레지스터(Word) + + + + 주소 문자열 표현, EX) %DW1100 + + + + + AddressString 을 바이트 배열로 변환 + + + + + AddressByteArray 바이트 배열의 수(2byte) + + + + + Lsis的虚拟服务器,其中TCP的端口支持Fnet协议,串口支持Cnet协议
+ LSisServer +
+
+ + + LSisServer + + + + + set plc + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NumberStyles HexNumber + + + + + + + Check the intput string address + + + + + + + + + + + + + + + + + + + 将带有数据类型的地址,转换成实际的byte数组的地址信息,例如 MW100 转成 M200 + + 带有类型的地址 + 是否是位操作 + 最终的按照字节为单位的地址信息 + + + + XGB Cnet I/F module supports Serial Port. The address can carry station number information, for example: s=2;D100 + + + XGB 主机的通道 0 仅支持 1:1 通信。 对于具有主从格式的 1:N 系统,在连接 XGL-C41A 模块的通道 1 或 XGB 主机中使用 RS-485 通信。 XGL-C41A 模块支持 RS-422/485 协议。 + + + + + Instantiate a Default object + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + XGB Cnet I/F module supports Serial Port. On Tcp/ip implementation, The address can carry station number information, for example: s=2;D100 + + + XGB 主机的通道 0 仅支持 1:1 通信。 对于具有主从格式的 1:N 系统,在连接 XGL-C41A 模块的通道 1 或 XGB 主机中使用 RS-485 通信。 XGL-C41A 模块支持 RS-422/485 协议。 + + + + + Instantiate a Default object + + + + + Instantiate a Default object + + Ip Address + Ip port + + + + PLC Station No. + + + + + + + + Read single byte value from plc + + Start address + result + + + + Write single byte value to plc + + Start address + value + Whether to write the successful + + + + Read single byte value from plc + + Start address + read result + + + + Write single byte value to plc + + Start address + value + Whether to write the successful + + + + + + + + + + ReadCoil, same as ReadBool + + address, for example: MX100, PX100 + Result + + + + ReadCoil, same as ReadBool + + address, for example: MX100, PX100 + array length + result + + + + WriteCoil + + Start Address + value for write + whether write is success + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + XGB Fast Enet I/F module supports open Ethernet. It provides network configuration that is to connect LSIS and other company PLC, PC on network + + + + + Instantiate a Default object + + + + + Instantiate a object by ipaddress and port + + the ip address of the plc + the port of the plc, default is 2004 + + + + Instantiate a object by ipaddress, port, cpuType, slotNo + + CpuType + the ip address of the plc + he port of the plc, default is 2004 + slot number + + + + + + + set plc + + + + + CPU TYPE + + + + + Cpu is error + + + + + RUN, STOP, ERROR, DEBUG + + + + + FEnet I/F module’s Base No. + + + + + FEnet I/F module’s Slot No. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ReadCoil + + Start address + Whether to read the successful + + + + ReadCoil + + Start address + read address length + Whether to read the successful + + + + Read single byte value from plc + + Start address + Whether to write the successful + + + + Write single byte value to plc + + Start address + value + Whether to write the successful + + + + WriteCoil + + Start address + bool value + Whether to write the successful + + + + WriteCoil + + Start address + bool value + Whether to write the successful + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 需要传入 MX100.2 的 100.2 部分,返回的是 + AnalysisAddress IX0.0.0 QX0.0.0 MW1.0 MB1.0 + + start address + is Q or I data + int address + + + + NumberStyles HexNumber + + + + + + + 所有支持的地址信息 + + + + + AnalysisAddress + + start address + analysis result + + + + Get DataType to Address + + address + dataType + + + + + + + Multi reading address Type of Read Individual + + dataType bit:0x04, byte:0x01, word:0x02, dword:0x03, lword:0x04, continuous:0x14 + address, for example: MX100, PX100 + Read Individual Command + + + + Returns true data content, supports read and write returns + + response data + real data + + + + get the description of the error code meanning + + code value + string information + + + + XGk Cnet I/F module supports Serial Port. + + + XGB 主机的通道 0 仅支持 1:1 通信。 对于具有主从格式的 1:N 系统,在连接 XGL-C41A 模块的通道 1 或 XGB 主机中使用 RS-485 通信。 XGL-C41A 模块支持 RS-422/485 协议。 + + + + + Instantiate a Default object + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Read + + + + + + + + + + Write + + + + + + + + + + Extract actual data form plc response + + response data + read + result + + + + + + + XGK Fast Enet I/F module supports open Ethernet. It provides network configuration that is to connect LSIS and other company PLC, PC on network + + + + + Instantiate a Default object + + + + + Instantiate a object by ipaddress and port + + the ip address of the plc + the port of the plc, default is 2004 + + + + Instantiate a object by ipaddress, port, cpuType, slotNo + + CpuType + the ip address of the plc + he port of the plc, default is 2004 + slot number + + + + + + + set plc + + + + + CPU TYPE + + + + + Cpu is error + + + + + RUN, STOP, ERROR, DEBUG + + + + + FEnet I/F module’s Base No. + + + + + FEnet I/F module’s Slot No. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ReadCoil + + Start address + Whether to read the successful + + + + ReadCoil + + Start address + read address length + Whether to read the successful + + + + Read single byte value from plc + + Start address + Whether to write the successful + + + + Write single byte value to plc + + Start address + value + Whether to write the successful + + + + WriteCoil + + Start address + bool value + Whether to write the successful + + + + WriteCoil + + Start address + bool value + Whether to write the successful + + + + Read + + + + + + + + + + + Write + + + + + + + + + + + CreateHeader + + + + + + + + Create a memory address variable name. + + 데이터타입 + 메모리타입 + 주소번지 + + + + + Char return according to data type + + 데이터타입 + + + + + Char return according to memory type + + 메모리타입 + + + + + 바이트 합치기 + + 개별바이트 + 전체바이트에 개별바이트를 합칠 인덱스 + 전체바이트 + 전체 바이트 + + + + AnalysisAddress XGT_MemoryType + + + + + + + GetDataTypeToAddress + + + + + + + Returns true data content, supports read and write returns + + response data + real data + + + + SetCpuType + + + + + + + Returns true data content, supports read and write returns + + response data + real data + + + + Returns true data content, supports read and write returns + + response data + real data + + + + get the description of the error code meanning + + code value + string information + + + + + + + 麦格米特PLC的辅助方法 + + + + + 深圳麦格米特PLC的通信对象,基于ModbusRtu协议实现,适用机型为 MC80/MC100/MC200/MC280/MC200E,具体支持的地址及范围参见API文档:http://api.hslcommunication.cn
+ The communication object of Shenzhen MegMeet PLC is based on the ModbusRtu, and the applicable model is MC80/MC100/MC200/MC280/MC200E, + and the specific supported address and range are described in API document: http://api.hslcommunication.cn +
+ + 位读写地址支持:X,Y,M,SM,S,T,C,字读写地址为:D,SD,Z,R,T,C,期中 C200以上使用int/uint类型进行读写操作 + +
+ + + 实例化一个默认的对象 + + + + + 指定客户端自己的站号来初始化
+ Specify the server address, port number, and client's own station number to initialize +
+ 客户端自身的站号 +
+ + + + + + + + + + + + + + + + + + + + + 深圳麦格米特PLC的通信对象,基于ModbusRtu转以太网协议实现,适用机型为 MC80/MC100/MC200/MC280/MC200E,具体支持的地址及范围参见API文档:http://api.hslcommunication.cn
+ The communication object of Shenzhen MegMeet PLC is based on the ModbusRtu over Ethernet protocol, and the applicable model is MC80/MC100/MC200/MC280/MC200E, + and the specific supported address and range are described in API document: http://api.hslcommunication.cn +
+ + 位读写地址支持:X,Y,M,SM,S,T,C,字读写地址为:D,SD,Z,R,T,C,期中 C200以上使用int/uint类型进行读写操作 + +
+ + + 实例化一个默认的对象 + + + + + 通过指定站号,ip地址,端口号来实例化一个新的对象 + + Ip地址 + 端口号 + 站号信息 + + + + + + + + + + + + + + + + + + + + + + 深圳麦格米特PLC的通信对象,基于ModbusTcp协议实现,适用机型为 MC80/MC100/MC200/MC280/MC200E,具体支持的地址及范围参见DEMO界面
+ The communication object of Shenzhen MegMeet PLC is based on the ModbusTcp, and the applicable model is MC80/MC100/MC200/MC280/MC200E, + and the specific supported address and range are described in Demo UI +
+ + 位读写地址支持:X,Y,M,SM,S,T,C,字读写地址为:D,SD,Z,R,T,C,期中 C200以上使用int/uint类型进行读写操作 + +
+ + + 实例化一个默认的对象 + + + + + 通过指定站号,ip地址,端口号来实例化一个新的对象 + + Ip地址 + 端口号 + 站号信息 + + + + + + + + + + + + + + + + + + + + + + 三菱的串口的接口类对象 + + + + + + + + + + + 三菱的A3C协议类接口对象,具有站号,是否和校验的属性
+ Mitsubishi's A3C protocol interface object, which has the attributes of station number, and checksum +
+
+ + + 当前A3C协议的站编号信息
+ Station number information of the current A3C protocol +
+
+ + + 当前的A3C协议是否使用和校验,默认使用
+ Whether the current A3C protocol uses sum check, it is used by default +
+
+ + + 当前的A3C协议的格式信息,可选格式1,2,3,4,默认格式1
+ Format information of the current A3C protocol, optional format 1, 2, 3, 4, default format 1 +
+
+ + + + + + 三菱的FxLink协议接口的设备信息 + + + + + PLC的当前的站号,需要根据实际的值来设定,默认是0
+ The current station number of the PLC needs to be set according to the actual value. The default is 0. +
+
+ + + 报文等待时间,单位10ms,设置范围为0-15
+ Message waiting time, unit is 10ms, setting range is 0-15 +
+
+ + + 是否启动和校验
+ Whether to start and sum verify +
+
+ + + 当前的PLC的Fxlinks协议格式,通常是格式1,或是格式4,所以此处可以设置1,或者是4
+ The current PLC Fxlinks protocol format is usually format 1 or format 4, so it can be set to 1 or 4 here +
+
+ + + + + + + + + + + + 基于MC协议的标准的设备接口,适用任何基于MC协议的PLC设备,主要是三菱,基恩士,松下的PLC设备。
+ The standard equipment interface based on MC protocol is suitable for any PLC equipment based on MC protocol, + mainly PLC equipment from Mitsubishi, Keyence, and Panasonic. +
+
+ + + 网络号,通常为0
+ Network number, usually 0 +
+ + 依据PLC的配置而配置,如果PLC配置了1,那么此处也填0,如果PLC配置了2,此处就填2,测试不通的话,继续测试0 + +
+ + + PLC编号,如果是本站信息,则是 0xFF 值,其他站则根据实际的情况指定。
+ The PLC number, if it is the information of this station, is the 0xFF value, and other stations are specified according to the actual situation. +
+
+ + + 网络站号,通常为0
+ Network station number, usually 0 +
+ + 依据PLC的配置而配置,如果PLC配置了1,那么此处也填0,如果PLC配置了2,此处就填2,测试不通的话,继续测试0 + +
+ + + 是否开启支持写入位到字寄存器的功能,该功能先读取字寄存器的字数据,然后修改其中的位,再写入回去,可能存在脏数据的风险
+ Whether to enable supporting the function of writing bit-to-word registers, which first reads the word data of the word register, then modifies the bits in it, and then writes back, there may be a risk of dirty data +
+ + 关于脏数据风险:从读取数据,修改位,再次写入数据时,大概需要经过3ms~10ms不等的时间,如果此期间内PLC修改了该字寄存器的其他位,再次写入数据时会恢复该点位的数据到读取时的初始值,可能引发设备故障,请谨慎开启此功能。
+ About dirty data risk: from reading data, modifying bits, writing data again, it takes about 3ms ~ 10ms to pass a time, if the PLC modifies other bits of the word register during this period, when writing data again, + it will restore the data at the point to the initial value when reading, which may cause equipment failure, please turn on this function carefully. +
+
+ + + 当前MC协议的分析地址的方法,对传入的字符串格式的地址进行数据解析。
+ The current MC protocol's address analysis method performs data parsing on the address of the incoming string format. +
+ 地址信息 + 数据长度 + 当前是否读写bool操作 + 解析后的数据信息 +
+ + + + + + 当前的MC协议的格式类型
+ The format type of the current MC protocol +
+
+ + + 从PLC反馈的数据中提取出实际的数据内容,需要传入反馈数据,是否位读取 + + 反馈的数据内容 + 是否位读取 + 解析后的结果对象 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MC协议的类型 + + + + + 基于二进制的MC协议 + + + + + 基于ASCII格式的MC协议 + + + + + 基于R系列的二进制的MC协议 + + + + + 基于R系列的ASCII格式的MC协议 + + + + + 基于MC协议的ASCII格式的辅助类 + + + + + 将MC协议的核心报文打包成一个可以直接对PLC进行发送的原始报文 + + MC协议的核心报文 + 网络号 + 网络站号 + 原始报文信息 + + + + 从PLC反馈的数据中提取出实际的数据内容,需要传入反馈数据,是否位读取 + + 反馈的数据内容 + 是否位读取 + 解析后的结果对象 + + + + 检查反馈的内容是否正确的 + + MC的反馈的内容 + 是否正确 + + + + 从三菱地址,是否位读取进行创建读取Ascii格式的MC的核心报文 + + 三菱Mc协议的数据地址 + 是否进行了位读取操作 + 带有成功标识的报文对象 + + + + 从三菱扩展地址,是否位读取进行创建读取的MC的核心报文 + + 是否进行了位读取操作 + 扩展指定 + 三菱Mc协议的数据地址 + 带有成功标识的报文对象 + + + + 以字为单位,创建ASCII数据写入的核心报文 + + 三菱Mc协议的数据地址 + 实际的原始数据信息 + 带有成功标识的报文对象 + + + + 以位为单位,创建ASCII数据写入的核心报文 + + 三菱Mc协议的数据地址 + 原始的bool数组数据 + 带有成功标识的报文对象 + + + + 按字为单位随机读取的指令创建 + + 地址数组 + 指令 + + + + 随机读取的指令创建 + + 地址数组 + 指令 + + + + + + + + + + 三菱PLC,二进制的辅助类对象 + + + + + 将MC协议的核心报文打包成一个可以直接对PLC进行发送的原始报文 + + MC协议的核心报文 + MC接口的PLC信息 + 原始报文信息 + + + + 检查从MC返回的数据是否是合法的。 + + 数据内容 + 是否合法 + + + + 从三菱地址,是否位读取进行创建读取的MC的核心报文
+ From the Mitsubishi address, whether to read the core message of the MC for creating and reading +
+ 是否进行了位读取操作 + 三菱Mc协议的数据地址 + 带有成功标识的报文对象 +
+ + + 以字为单位,创建数据写入的核心报文 + + 三菱Mc协议的数据地址 + 实际的原始数据信息 + 带有成功标识的报文对象 + + + + 以位为单位,创建数据写入的核心报文 + + 三菱Mc协议的数据地址 + 原始的bool数组数据 + 带有成功标识的报文对象 + + + + 从三菱扩展地址,是否位读取进行创建读取的MC的核心报文 + + 是否进行了位读取操作 + 扩展指定 + 三菱Mc协议的数据地址 + 带有成功标识的报文对象 + + + + 按字为单位随机读取的指令创建 + + 地址数组 + 指令 + + + + 随机读取的指令创建 + + 地址数组 + 指令 + + + + 创建批量读取标签的报文数据信息 + + 标签名 + 长度信息 + 报文名称 + + + + 读取本站缓冲寄存器的数据信息,需要指定寄存器的地址,和读取的长度 + + 寄存器的地址 + 数据长度 + 结果内容 + + + + 构建读取智能模块的命令,需要指定模块编号,起始地址,读取的长度,注意,该长度以字节为单位。 + + 模块编号 + 智能模块的起始地址 + 读取的字长度 + 报文的结果内容 + + + + 解析出标签读取的数据内容 + + 返回的数据信息 + 解析结果 + + + + + + + [商业授权] 读取PLC的标签信息,需要传入标签的名称,读取的字长度,标签举例:A; label[1]; bbb[10,10,10]
+ [Authorization] To read the label information of the PLC, you need to pass in the name of the label, + the length of the word read, and an example of the label: A; label [1]; bbb [10,10,10] +
+ MC协议通信对象 + 标签名 + 读取长度 + 是否成功 + + 不可以访问局部标签。
+ 不可以访问通过GX Works2设置的全局标签。
+ 为了访问全局标签,需要通过GX Works3的全局标签设置编辑器将“来自于外部设备的访问”的设置项目置为有效。(默认为无效。)
+ 以ASCII代码进行数据通信时,由于需要从UTF-16将标签名转换为ASCII代码,因此报文容量将增加 +
+
+ + + + + + MC协议的辅助类对象,提供了MC协议的读写操作的基本支持 + + + + + 返回按照字单位读取的最低的长度信息 + + MC协议的类型 + 长度信息 + + + + 返回按照位单位读取的最低的长度信息 + + MC协议的类型 + 长度信息 + + + + + 初步支持普通的数据地址之外,还额外支持高级的地址写法,以下是示例(适用于MC协议为二进制和ASCII格式):
+ [商业授权] 扩展的数据地址: 表示为 ext=1;W100 访问扩展区域为1的W100的地址信息
+ [商业授权] 缓冲存储器地址: 表示为 mem=32 访问地址为32的本站缓冲存储器地址
+ [商业授权] 智能模块地址:表示为 module=3;4106 访问模块号3,偏移地址是4106的数据,偏移地址需要根据模块的详细信息来确认。
+ [商业授权] 基于标签的地址: 表示位 s=AAA 假如标签的名称为AAA,但是标签的读取是有条件的,详细参照
+
+
+ + + + + + + 对于X,Y类型的地址,有两种表示方式,十六进制和八进制,默认16进制,比如输入 X10 是16进制的,如果想要输入8进制的地址,地址补0操作,例如 X010 + + + + + + 当读取的长度过大时,会自动进行切割,对于二进制格式,切割长度为7168,对于ASCII格式协议来说,切割长度则是3584
+ 对于X,Y类型的地址,有两种表示方式,十六进制和八进制,默认16进制,比如输入 X10 是16进制的,如果想要输入8进制的地址,地址补0操作,例如 X010 +
+
+ + + + 当读取的长度过大时,会自动进行切割,对于二进制格式,切割长度为7168,对于ASCII格式协议来说,切割长度则是3584
+ 对于X,Y类型的地址,有两种表示方式,十六进制和八进制,默认16进制,比如输入 X10 是16进制的,如果想要输入8进制的地址,地址补0操作,例如 X010 +
+
+ + + + + + + + + + + + + + + 随机读取PLC的数据信息,可以跨地址,跨类型组合,但是每个地址只能读取一个word,也就是2个字节的内容。收到结果后,需要自行解析数据
+ Randomly read PLC data information, which can be combined across addresses and types, but each address can only read one word, + which is the content of 2 bytes. After receiving the results, you need to parse the data yourself +
+ MC协议通信对象 + 所有的地址的集合 + + 访问安装有 Q 系列 C24/E71 的站 QCPU 上位站 经由 Q 系列兼容网络系统 MELSECNET/H MELSECNET/10 Ethernet 的 QCPU 其他站 时 + 访问点数········1≦ 字访问点数 双字访问点数 ≦192 +
+ 访问 QnACPU 其他站 经由 QnA 系列兼容网络系统 MELSECNET/10 Ethernet 的 Q/QnACPU 其他站 时访问点数········1≦ 字访问点数 双字访问点数 ≦96 +
+ 访问上述以外的 PLC CPU 其他站 时访问点数········1≦字访问点数≦10 +
+ + + 结果 +
+ + + 使用块读取PLC的数据信息,可以跨地址,跨类型组合,每个地址是任意的长度。收到结果后,需要自行解析数据,目前只支持字地址,比如D区,W区,R区,不支持X,Y,M,B,L等等
+ Read the data information of the PLC randomly. It can be combined across addresses and types. Each address is of any length. After receiving the results, + you need to parse the data yourself. Currently, only word addresses are supported, such as D area, W area, R area. X, Y, M, B, L, etc +
+ MC协议通信对象 + 所有的地址的集合 + 每个地址的长度信息 + + 实际测试不一定所有的plc都可以读取成功,具体情况需要具体分析 +
+ 1 块数按照下列要求指定 120 ≧ 字软元件块数 + 位软元件块数 +
+ 2 各软元件点数按照下列要求指定 960 ≧ 字软元件各块的合计点数 + 位软元件各块的合计点数 +
+ + + + 结果 +
+ + + 随机读取PLC的数据信息,可以跨地址,跨类型组合,但是每个地址只能读取一个word,也就是2个字节的内容。收到结果后,自动转换为了short类型的数组
+ Randomly read PLC data information, which can be combined across addresses and types, but each address can only read one word, + which is the content of 2 bytes. After receiving the result, it is automatically converted to an array of type short. +
+ MC协议的通信对象 + 所有的地址的集合 + + 访问安装有 Q 系列 C24/E71 的站 QCPU 上位站 经由 Q 系列兼容网络系统 MELSECNET/H MELSECNET/10 Ethernet 的 QCPU 其他站 时 + 访问点数········1≦ 字访问点数 双字访问点数 ≦192 + + 访问 QnACPU 其他站 经由 QnA 系列兼容网络系统 MELSECNET/10 Ethernet 的 Q/QnACPU 其他站 时访问点数········1≦ 字访问点数 双字访问点数 ≦96 + + 访问上述以外的 PLC CPU 其他站 时访问点数········1≦字访问点数≦10 + + 包含是否成功的结果对象 +
+ + + 随机读取PLC的数据信息,可以跨地址,跨类型组合,但是每个地址只能读取一个word,也就是2个字节的内容。收到结果后,自动转换为了ushort类型的数组
+ Randomly read PLC data information, which can be combined across addresses and types, but each address can only read one word, + which is the content of 2 bytes. After receiving the result, it is automatically converted to an array of type ushort. +
+ MC协议的通信对象 + 所有的地址的集合 + + 访问安装有 Q 系列 C24/E71 的站 QCPU 上位站 经由 Q 系列兼容网络系统 MELSECNET/H MELSECNET/10 Ethernet 的 QCPU 其他站 时 + 访问点数········1≦ 字访问点数 双字访问点数 ≦192 + + 访问 QnACPU 其他站 经由 QnA 系列兼容网络系统 MELSECNET/10 Ethernet 的 Q/QnACPU 其他站 时访问点数········1≦ 字访问点数 双字访问点数 ≦96 + + 访问上述以外的 PLC CPU 其他站 时访问点数········1≦字访问点数≦10 + + 包含是否成功的结果对象 +
+ + + + + + + + + + + + + + + [商业授权] 读取缓冲寄存器的数据信息,地址直接为偏移地址
+ [Authorization] Read the data information of the buffer register, the address is directly the offset address +
+ + 本指令不可以访问下述缓冲存储器:
+ 1. 本站(SLMP对应设备)上安装的智能功能模块
+ 2. 其它站缓冲存储器
+
+ MC通信对象 + 偏移地址 + 读取长度 + 读取的内容 +
+ + + + + + [商业授权] 读取智能模块的数据信息,需要指定模块地址,偏移地址,读取的字节长度
+ [Authorization] To read the extended data information, you need to enter the extended value information in addition to the original address and length information +
+ MC通信对象 + 模块地址 + 地址 + 数据长度 + 返回结果 +
+ + + + + + [商业授权] 读取扩展的数据信息,需要在原有的地址,长度信息之外,输入扩展值信息
+ [Authorization] To read the extended data information, you need to enter the extended value information in addition to the original address and length information +
+ MC通信对象 + 扩展信息 + 地址 + 数据长度 + 返回结果 +
+ + + + + + 远程Run操作
+ Remote Run Operation +
+ MC协议通信对象 + 是否成功 +
+ + + 远程Stop操作
+ Remote Stop operation +
+ MC协议通信对象 + 是否成功 +
+ + + 远程Reset操作
+ Remote Reset Operation +
+ MC协议通信对象 + 是否成功 +
+ + + 读取PLC的型号信息,例如 Q02HCPU
+ Read PLC model information, such as Q02HCPU +
+ MC协议通信对象 + 返回型号的结果对象 +
+ + + LED 熄灭 出错代码初始化
+ LED off Error code initialization +
+ MC协议通信对象 + 是否成功 +
+ + + + + + + + + + + + + + + + + + MelsecA3CNet1协议通信的辅助类 + + + + + 将命令进行打包传送,可选站号及是否和校验机制 + + PLC设备通信对象 + mc协议的命令 + PLC的站号 + 最终的原始报文信息 + + + + 根据PLC返回的数据信息,获取到实际的数据内容 + + PLC设备通信对象 + PLC返回的数据信息 + 带有是否成功的读取结果对象内容 + + + + 批量读取PLC的数据,以字为单位,支持读取X,Y,M,S,D,T,C,具体的地址范围需要根据PLC型号来确认 + + PLC设备通信对象 + 地址信息 + 数据长度 + 读取结果信息 + + + + + + + 批量写入PLC的数据,以字为单位,也就是说最少2个字节信息,支持X,Y,M,S,D,T,C,具体的地址范围需要根据PLC型号来确认 + + PLC设备通信对象 + 地址信息 + 数据值 + 是否写入成功 + + + + + + + 批量读取bool类型数据,支持的类型为X,Y,S,T,C,具体的地址范围取决于PLC的类型 + + PLC设备通信对象 + 地址信息,比如X10,Y17,注意X,Y的地址是8进制的 + 读取的长度 + 读取结果信息 + + + + + + + + + + + + + 远程Run操作 + + PLC设备通信对象 + 是否成功 + + + + 远程Stop操作 + + PLC设备通信对象 + 是否成功 + + + + 读取PLC的型号信息 + + PLC设备通信对象 + 返回型号的结果对象 + + + + + + + + + + + + + 三菱的FxLinks的辅助方法信息 + + + + + 将当前的报文进行打包,根据和校验的方式以及格式信息来实现打包操作 + + PLC通信对象 + 原始的命令数据 + 打包后的命令 + + + + 创建一条读取的指令信息,需要指定一些参数 + + PLC的站号 + 地址信息 + 数据长度 + 是否位读取 + 等待时间 + 是否成功的结果对象 + + + + 创建一条别入bool数据的指令信息,需要指定一些参数 + + 站号 + 地址 + 数组值 + 等待时间 + 是否创建成功 + + + + 创建一条别入byte数据的指令信息,需要指定一些参数,按照字单位 + + 站号 + 地址 + 数组值 + 等待时间 + 命令报文的结果内容对象 + + + + 创建启动PLC的报文信息 + + 站号信息 + 等待时间 + 命令报文的结果内容对象 + + + + 创建启动PLC的报文信息 + + 站号信息 + 等待时间 + 命令报文的结果内容对象 + + + + 创建读取PLC类型的命令报文 + + 站号信息 + 等待实际 + 命令报文的结果内容对象 + + + + 从编码中提取PLC的型号信息 + + 编码 + PLC的型号信息 + + + + 检查PLC的消息反馈是否合法,合法则提取当前的数据信息,当时写入的命令消息时,无任何的数据返回
+ Check whether the PLC's message feedback is legal. If it is legal, extract the current data information. When the command message is written at that time, no data is returned. +
+ 从PLC反馈的数据消息 + 检查的结果消息 +
+ + + 批量读取PLC的数据,以字为单位,支持读取X,Y,M,S,D,T,C,具体的地址范围需要根据PLC型号来确认,地址支持动态指定站号,例如:s=2;D100
+ Read PLC data in batches, in units of words, supports reading X, Y, M, S, D, T, C. + The specific address range needs to be confirmed according to the PLC model, + The address supports dynamically specifying the station number, for example: s=2;D100 +
+ PLC通信对象 + 地址信息 + 数据长度 + 读取结果信息 +
+ + + 批量写入PLC的数据,以字为单位,也就是说最少2个字节信息,支持X,Y,M,S,D,T,C,具体的地址范围需要根据PLC型号来确认,地址支持动态指定站号,例如:s=2;D100
+ The data written to the PLC in batches is in units of words, that is, at least 2 bytes of information. + It supports X, Y, M, S, D, T, and C. The specific address range needs to be confirmed according to the PLC model, + The address supports dynamically specifying the station number, for example: s=2;D100 +
+ PLC通信对象 + 地址信息 + 数据值 + 是否写入成功 +
+ + + + + + + + + 批量读取bool类型数据,支持的类型为X,Y,S,T,C,具体的地址范围取决于PLC的类型,地址支持动态指定站号,例如:s=2;D100
+ Read bool data in batches. The supported types are X, Y, S, T, C. The specific address range depends on the type of PLC, + The address supports dynamically specifying the station number, for example: s=2;D100 +
+ PLC通信对象 + 地址信息,比如X10,Y17,注意X,Y的地址是8进制的 + 读取的长度 + 读取结果信息 +
+ + + 批量写入bool类型的数组,支持的类型为X,Y,S,T,C,具体的地址范围取决于PLC的类型,地址支持动态指定站号,例如:s=2;D100
+ Write arrays of type bool in batches. The supported types are X, Y, S, T, C. The specific address range depends on the type of PLC, + The address supports dynamically specifying the station number, for example: s=2;D100 +
+ PLC通信对象 + PLC的地址信息 + 数据信息 + 是否写入成功 +
+ + + + + + + + + [商业授权] 启动PLC的操作,可以携带额外的参数信息,指定站号。举例:s=2; 注意:分号是必须的。
+ [Authorization] Start the PLC operation, you can carry additional parameter information and specify the station number. Example: s=2; Note: The semicolon is required. +
+ PLC通信对象 + 允许携带的参数信息,例如s=2; 也可以为空 + 是否启动成功 +
+ + + [商业授权] 停止PLC的操作,可以携带额外的参数信息,指定站号。举例:s=2; 注意:分号是必须的。
+ [Authorization] Stop PLC operation, you can carry additional parameter information and specify the station number. Example: s=2; Note: The semicolon is required. +
+ PLC通信对象 + 允许携带的参数信息,例如s=2; 也可以为空 + 是否停止成功 +
+ + + [商业授权] 读取PLC的型号信息,可以携带额外的参数信息,指定站号。举例:s=2; 注意:分号是必须的。
+ [Authorization] Read the PLC model information, you can carry additional parameter information, and specify the station number. Example: s=2; Note: The semicolon is required. +
+ PLC通信对象 + 允许携带的参数信息,例如s=2; 也可以为空 + 带PLC型号的结果信息 +
+ + + + + + + + + + + + 三菱编程口协议的辅助方法,定义了如何读写bool数据,以及读写原始字节的数据。
+ The auxiliary method of Mitsubishi programming port protocol defines how to read and write bool data and read and write raw byte data. +
+
+ + + + + + 根据指定的地址及长度信息从三菱PLC中读取原始的字节数据,根据PLC中实际定义的规则,可以解析出任何类的数据信息
+ Read the original byte data from the Mitsubishi PLC according to the specified address and length information. + According to the rules actually defined in the PLC, any type of data information can be parsed +
+ PLC通信对象 + 读取地址,,支持的类型参考文档说明 + 读取的数据长度 + 是否是新版的串口访问类 + 带成功标志的结果数据对象 + + 假设起始地址为D100,D100存储了温度,100.6℃值为1006,D101存储了压力,1.23Mpa值为123,D102,D103存储了产量计数,读取如下: + + 以下是读取不同类型数据的示例 + + +
+ + + 从三菱PLC中批量读取位软元件,返回读取结果,该读取地址最好从0,16,32...等开始读取,这样可以读取比较长的数据数组
+ Read bit devices in batches from Mitsubishi PLC and return the read results. + The read address should preferably be read from 0, 16, 32... etc., so that a relatively long data array can be read +
+ PLC的通信对象 + 起始地址 + 读取的长度 + 是否是新版的串口访问类 + 带成功标志的结果数据对象 + + + +
+ + + 根据指定的地址向PLC写入数据,数据格式为原始的字节类型
+ Write data to the PLC according to the specified address, the data format is the original byte type +
+ PLC通信对象 + 初始地址,支持的类型参考文档说明 + 原始的字节数据 + 是否是新版的串口访问类 + + 假设起始地址为D100,D100存储了温度,100.6℃值为1006,D101存储了压力,1.23Mpa值为123,D102,D103存储了产量计数,写入如下: + + 以下是读取不同类型数据的示例 + + + 是否写入成功的结果对象 +
+ + + 强制写入位数据的通断,支持的类型参考文档说明
+ The on-off of the forced write bit data, please refer to the document description for the supported types +
+ PLC通信对象 + 地址信息 + 是否为通 + 是否写入成功的结果对象 +
+ + + 激活PLC的接收状态,需要再和PLC交互之前进行调用,之后就需要再调用了。
+
+ PLC通信对象 + 是否激活成功 +
+ + + + + + + + + + + + + + + + + + 检查PLC返回的读取数据是否是正常的 + + Plc反馈的数据信息 + 检查结果 + + + + 检查PLC返回的写入的数据是否是正常的 + + Plc反馈的数据信息 + 检查结果 + + + + 生成位写入的数据报文信息,该报文可直接用于发送串口给PLC + + 地址信息,每个地址存在一定的范围,需要谨慎传入数据。举例:M10,S10,X5,Y10,C10,T10 + True或是False + 带报文信息的结果对象 + + + + 根据类型地址长度确认需要读取的指令头 + + 起始地址 + 长度 + 是否是新版的串口访问类 + 带有成功标志的指令数据 + + + + 根据类型地址长度确认需要读取的指令头 + + 起始地址 + bool数组长度 + 是否是新版的串口访问类 + 带有成功标志的指令数据 + + + + 根据类型地址以及需要写入的数据来生成指令头 + + 起始地址 + 实际的数据信息 + 是否是新版的串口访问类 + 带有成功标志的指令数据 + + + + 从PLC反馈的数据进行提炼操作 + + PLC反馈的真实数据 + 数据提炼后的真实数据 + + + + 从PLC反馈的数据进行提炼bool数组操作 + + PLC反馈的真实数据 + 起始提取的点信息 + bool数组的长度 + 数据提炼后的真实数据 + + + + 解析数据地址成不同的三菱地址类型 + + 数据地址 + 地址结果对象 + + + + 返回读取的地址及长度信息 + + 读取的地址信息 + 是否是新版的串口访问类 + 带起始地址的结果对象 + + + + 返回读取的实际的字节地址,相对位置,以及当前的位偏置信息 + 读取的地址信息 + 是否是新版的串口访问类 + 带起始地址的结果对象 + + + + 三菱PLC通讯协议,采用A兼容1E帧协议实现,使用ASCII码通讯,请根据实际型号来进行选取
+ Mitsubishi PLC communication protocol, implemented using A compatible 1E frame protocol, using ascii code communication, please choose according to the actual model +
+ + + +
+ + + 实例化一个默认的对象
+ Instantiate a default object +
+
+ + + 指定ip地址和端口来来实例化一个默认的对象
+ Specify the IP address and port to instantiate a default object +
+ PLC的Ip地址 + PLC的端口 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 根据类型地址长度确认需要读取的指令头 + + 起始地址 + 长度 + 指示是否按照位成批的读出 + PLC编号 + 带有成功标志的指令数据 + + + + 根据类型地址以及需要写入的数据来生成指令头 + + 起始地址 + 数据值 + PLC编号 + 带有成功标志的指令数据 + + + + 根据类型地址以及需要写入的数据来生成指令头 + + 起始地址 + 数据值 + PLC编号 + 带有成功标志的指令数据 + + + + 检测反馈的消息是否合法 + + 接收的报文 + 是否成功 + + + + 从PLC反馈的数据中提取出实际的数据内容,需要传入反馈数据,是否位读取 + + 反馈的数据内容 + 是否位读取 + 解析后的结果对象 + + + + 三菱PLC的数据类型,此处包含了几个常用的类型 + + + + + 如果您清楚类型代号,可以根据值进行扩展 + + 数据类型的代号 + 0或1,默认为0 + ASCII格式的类型信息 + 指示地址的多少进制的,10或是16 + + + + 类型的代号值(软元件代码,用于区分软元件类型,如:D,R) + + + + + 数据的类型,0代表按字,1代表按位 + + + + + 当以ASCII格式通讯时的类型描述 + + + + + 指示地址是10进制,还是16进制的 + + + + + X输入寄存器 + + + + + Y输出寄存器 + + + + + M中间寄存器 + + + + + S状态寄存器 + + + + + F报警器 + + + + + B连接继电器 + + + + + TS定时器触点 + + + + + TC定时器线圈 + + + + + TN定时器当前值 + + + + + CS计数器触点 + + + + + CC计数器线圈 + + + + + CN计数器当前值 + + + + + D数据寄存器 + + + + + W链接寄存器 + + + + + R文件寄存器 + + + + + 三菱PLC通讯协议,采用A兼容1E帧协议实现,使用二进制码通讯,请根据实际型号来进行选取
+ Mitsubishi PLC communication protocol, implemented using A compatible 1E frame protocol, using binary code communication, please choose according to the actual model +
+ + 本类适用于的PLC列表 + + FX3U(C) PLC 测试人sandy_liao + + 本通讯类由CKernal推送,感谢 + +
+ + + 实例化一个默认的对象
+ Instantiate a default object +
+
+ + + 指定ip地址和端口来来实例化一个默认的对象
+ Specify the IP address and port to instantiate a default object +
+ PLC的Ip地址 + PLC的端口 +
+ + + + + + PLC编号,默认为0xFF
+ PLC number, default is 0xFF +
+
+ + + + + + + + + + + + + + + 批量读取数组信息,需要指定地址和长度,地址示例M100,S100,B1A,如果是X,Y, X017就是8进制地址,Y10就是16进制地址。
+ Batch read array information, need to specify the address and length, return array. + Examples of addresses M100, S100, B1A, if it is X, Y, X017 is an octal address, Y10 is a hexadecimal address. +
+ + 根据协议的规范,最多读取256长度的bool数组信息,如果需要读取更长的bool信息,需要按字为单位进行读取的操作。 + + 数据地址 + 数据长度 + 带有成功标识的byte[]数组 +
+ + + 批量写入数组数据,返回是否成功,地址示例M100,S100,B1A,如果是X,Y, X017就是8进制地址,Y10就是16进制地址。
+ Batch write array data, return whether the write was successful. + Examples of addresses M100, S100, B1A, if it is X, Y, X017 is an octal address, Y10 is a hexadecimal address. +
+ 起始地址 + 写入值 + 带有成功标识的结果类对象 +
+ + + + + + + + + + + + 根据类型地址长度确认需要读取的指令头 + + 起始地址 + 长度 + 指示是否按照位成批的读出 + PLC编号 + 带有成功标志的指令数据 + + + + 根据类型地址以及需要写入的数据来生成指令头 + + 起始地址 + 数据值 + PLC编号 + 带有成功标志的指令数据 + + + + 根据类型地址以及需要写入的数据来生成指令头 + + 起始地址 + 数据值 + PLC编号 + 带有成功标志的指令数据 + + + + 检测反馈的消息是否合法 + + 接收的报文 + 是否成功 + + + + 从PLC反馈的数据中提取出实际的数据内容,需要传入反馈数据,是否位读取 + + 反馈的数据内容 + 是否位读取 + 解析后的结果对象 + + + + 基于Qna 兼容3C帧的格式一的通讯,具体的地址需要参照三菱的基本地址
+ Based on Qna-compatible 3C frame format one communication, the specific address needs to refer to the basic address of Mitsubishi. +
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 基于Qna 兼容3C帧的格式一的通讯,具体的地址需要参照三菱的基本地址,本类是基于tcp通讯的实现
+ Based on Qna-compatible 3C frame format one communication, the specific address needs to refer to the basic address of Mitsubishi. This class is based on TCP communication. +
+ + 地址可以携带站号信息,例如:s=2;D100 + +
+ + + 实例化默认的对象
+ Instantiate the default object +
+
+ + + 指定ip地址和端口号来实例化对象
+ Specify the IP address and port number to instantiate the object +
+ Ip地址信息 + 端口号信息 +
+ + + + + + + + + + + + + + + 批量读取PLC的数据,以字为单位,支持读取X,Y,M,S,D,T,C,具体的地址范围需要根据PLC型号来确认
+ Read PLC data in batches, in units of words, supports reading X, Y, M, S, D, T, C. The specific address range needs to be confirmed according to the PLC model +
+ 地址信息 + 数据长度 + 读取结果信息 +
+ + + 批量写入PLC的数据,以字为单位,也就是说最少2个字节信息,支持X,Y,M,S,D,T,C,具体的地址范围需要根据PLC型号来确认
+ The data written to the PLC in batches is in units of words, that is, at least 2 bytes of information. It supports X, Y, M, S, D, T, and C. The specific address range needs to be confirmed according to the PLC model. +
+ 地址信息 + 数据值 + 是否写入成功 +
+ + + + + + + + + 批量读取bool类型数据,支持的类型为X,Y,S,T,C,具体的地址范围取决于PLC的类型
+ Read bool data in batches. The supported types are X, Y, S, T, C. The specific address range depends on the type of PLC. +
+ 地址信息,比如X10,Y17,注意X,Y的地址是8进制的 + 读取的长度 + 读取结果信息 +
+ + + 批量写入bool类型的数组,支持的类型为X,Y,S,T,C,具体的地址范围取决于PLC的类型
+ Write arrays of type bool in batches. The supported types are X, Y, S, T, C. The specific address range depends on the type of PLC. +
+ + 当需要写入D寄存器的位时,可以开启True,然后地址使用 D100.2 等格式进行批量写入位操作,该操作有一定风险,参考属性。 + + PLC的地址信息 + 数据信息 + 是否写入成功 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 基于MC协议的A3C格式虚拟服务器,可以模拟A3C格式的PLC,支持格式1,2,3,4,具体可以使用来设置, + 支持设置是否校验,同时支持网口或是串口的访问
+ A3C format virtual server based on MC protocol can simulate A3C format PLC, support format 1, 2, 3, 4, + specifically you can use to set, support whether to verify the setting, + and also support network Port or serial port access +
+ + 可访问的地址支持M,X,Y,B,D,W,R,ZR地址,其中 M,X,Y,B 支持位访问 + +
+ + + 实例化一个虚拟的A3C服务器 + + + + + + + + + + + + + + + + + + + + + + + + + + 三菱PLC的EIP协议的实现,当PLC使用了 QJ71EIP71 模块时就需要使用本类来访问 + + + + + + + + + + + Read data information, data length for read array length information + + Address format of the node + In the case of arrays, the length of the array + Result data with result object + + + + + + + 三菱计算机链接协议,适用FX3U系列,FX3G,FX3S等等系列,通常在PLC侧连接的是485的接线口
+ Mitsubishi Computer Link Protocol, suitable for FX3U series, FX3G, FX3S, etc., usually the 485 connection port is connected on the PLC side +
+ + 关于在PLC侧的配置信息,协议:专用协议 传送控制步骤:格式一 站号设置:0 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 三菱计算机链接协议的网口版本,适用FX3U系列,FX3G,FX3S等等系列,通常在PLC侧连接的是485的接线口
+ Network port version of Mitsubishi Computer Link Protocol, suitable for FX3U series, FX3G, FX3S, etc., usually the 485 connection port is connected on the PLC side +
+ + 关于在PLC侧的配置信息,协议:专用协议 传送控制步骤:格式一 站号设置:0 + +
+ + + 实例化默认的对象
+ Instantiate the default object +
+
+ + + 指定ip地址和端口号来实例化默认的对象
+ Specify the IP address and port number to instantiate the default object +
+ Ip地址信息 + 端口号 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 三菱的虚拟的FxLinks服务器 + + + + + 实例化一个虚拟的FxLinks服务器 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 三菱串口协议的网络版,如果使用的是 FX3U编程口(fx2n) -> GOT1000(RS232)(或是GOT2000) -> 上位机(以太网) 的方式,那么就需要把设置为 True
+ The network version of the Mitsubishi serial port protocol, if you use the FX3U programming port (fx2n) -> GOT1000 (RS232) (or GOT2000) -> host computer (Ethernet) method, + then you need to put is set to True +
+ + 一般老旧的型号,例如FX2N之类的,需要将设置为False,如果是FX3U新的型号,则需要将设置为True + + + + +
+ + + 实例化网络版的三菱的串口协议的通讯对象
+ Instantiate the communication object of Mitsubishi's serial protocol on the network +
+
+ + + 指定ip地址及端口号来实例化三菱的串口协议的通讯对象
+ Specify the IP address and port number to instantiate the communication object of Mitsubishi's serial protocol +
+ Ip地址 + 端口号 +
+ + + 获取或设置是否使用GOT连接三菱的PLC,当使用了GOT连接到 + + + + + + + + + + + + + + + + + + + + + + + 当前的编程口协议是否为新版,默认为新版,如果无法读取,切换旧版再次尝试
+ Whether the current programming port protocol is the new version, the default is the new version, + if it cannot be read, switch to the old version and try again +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 所有三菱通讯类的通用辅助工具类,包含了一些通用的静态方法,可以使用本类来获取一些原始的报文信息。详细的操作参见例子
+ All general auxiliary tool classes of Mitsubishi communication class include some general static methods. + You can use this class to get some primitive message information. See the example for detailed operation +
+
+ + + 解析A1E协议数据地址
+ Parse A1E protocol data address +
+ 数据地址 + 结果对象 +
+ + + 根据三菱的错误码去查找对象描述信息 + + 错误码 + 描述信息 + + + + 从三菱的地址中构建MC协议的6字节的ASCII格式的地址 + + 三菱地址 + 三菱的数据类型 + 6字节的ASCII格式的地址 + + + + 将0,1,0,1的字节数组压缩成三菱格式的字节数组来表示开关量的 + + 原始的数据字节 + 压缩过后的数据字节 + + + + 将bool的组压缩成三菱格式的字节数组来表示开关量的 + + 原始的数据字节 + 压缩过后的数据字节 + + + + 计算Fx协议指令的和校验信息 + + 字节数据 + 起始的索引信息 + 结束的长度信息 + 校验之后的数据 + + + + 检查指定的和校验是否是正确的 + + 字节数据 + 是否成功 + + + + 三菱PLC通讯类,采用UDP的协议实现,采用Qna兼容3E帧协议实现,需要在PLC侧先的以太网模块先进行配置,必须为ascii通讯
+ Mitsubishi PLC communication class is implemented using UDP protocol and Qna compatible 3E frame protocol. + The Ethernet module needs to be configured first on the PLC side, and it must be ascii communication. +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 三菱PLC通讯类,采用Qna兼容3E帧协议实现,需要在PLC侧先的以太网模块先进行配置,必须为ASCII通讯格式
+ Mitsubishi PLC communication class is implemented using Qna compatible 3E frame protocol. + The Ethernet module on the PLC side needs to be configured first. It must be ascii communication. +
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 三菱PLC的数据类型,此处包含了几个常用的类型
+ Data types of Mitsubishi PLC, here contains several commonly used types +
+
+ + + 实例化一个三菱数据类型对象,如果您清楚类型代号,可以根据值进行扩展
+ Instantiate a Mitsubishi data type object, if you know the type code, you can expand according to the value +
+ 数据类型的代号 + 0或1,默认为0,0代表按字,1代表按位 + ASCII格式的类型信息 + 指示地址的多少进制的,10或是16 +
+ + + 类型的代号值 + + + + + 数据的类型,0代表按字,1代表按位 + + + + + 当以ASCII格式通讯时的类型描述 + + + + + 指示地址是10进制,还是16进制的 + + + + + X输入继电器 + + + + + Y输出继电器 + + + + + M内部继电器 + + + + + SM特殊继电器 + + + + + S步进继电器 + + + + + L锁存继电器 + + + + + F报警器 + + + + + V边沿继电器 + + + + + B链接继电器 + + + + + SB特殊链接继电器 + + + + + DX直接访问输入 + + + + + DY直接访问输出 + + + + + D数据寄存器 + + + + + 特殊链接存储器 + + + + + W链接寄存器 + + + + + SW特殊链接寄存器 + + + + + R文件寄存器 + + + + + 变址寄存器 + + + + + 文件寄存器ZR区 + + + + + 定时器的当前值 + + + + + 定时器的触点 + + + + + 定时器的线圈 + + + + + 累计定时器的触点 + + + + + 累计定时器的线圈 + + + + + 累计定时器的当前值 + + + + + 计数器的当前值 + + + + + 计数器的触点 + + + + + 计数器的线圈 + + + + + X输入继电器 + + + + + Y输入继电器 + + + + + M内部继电器 + + + + + 特殊继电器 + + + + + 锁存继电器 + + + + + 报警器 + + + + + 变址继电器 + + + + + S步进继电器 + + + + + 链接继电器 + + + + + 特殊链接继电器 + + + + + 直接访问输入继电器 + + + + + 直接访问输出继电器 + + + + + 数据寄存器 + + + + + 特殊数据寄存器 + + + + + 链接寄存器 + + + + + 特殊链接寄存器 + + + + + 文件寄存器 + + + + + 变址寄存器 + + + + + 长累计定时器触点 + + + + + 长累计定时器线圈 + + + + + 长累计定时器当前值 + + + + + 累计定时器触点 + + + + + 累计定时器线圈 + + + + + 累计定时器当前值 + + + + + 长定时器触点 + + + + + 长定时器线圈 + + + + + 长定时器当前值 + + + + + 定时器触点 + + + + + 定时器线圈 + + + + + 定时器当前值 + + + + + 长计数器触点 + + + + + 长计数器线圈 + + + + + 长计数器当前值 + + + + + 计数器触点 + + + + + 计数器线圈 + + + + + 计数器当前值 + + + + + X输入继电器 + + + + + Y输出继电器 + + + + + 链接继电器 + + + + + 内部辅助继电器 + + + + + 锁存继电器 + + + + + 控制继电器 + + + + + 控制存储器 + + + + + 数据存储器 + + + + + 文件寄存器 + + + + + 文件寄存器 + + + + + 链路寄存器 + + + + + 计时器(当前值) + + + + + 计时器(接点) + + + + + 计时器(线圈) + + + + + 计数器(当前值) + + + + + 计数器(接点) + + + + + 计数器(线圈) + + + + + 输入继电器 + + + + + 输出继电器 + + + + + 链接继电器 + + + + + 内部继电器 + + + + + 数据存储器 + + + + + 链接存储器 + + + + + 计时器(当前值) + + + + + 计时器(接点) + + + + + 计数器(当前值) + + + + + 计数器(接点) + + + + + 特殊链接继电器 + + + + + 特殊链接存储器 + + + + + 三菱的R系列的MC协议,支持的地址类型和 有区别,详细请查看对应的API文档说明 + + + + + 实例化三菱R系列的Qna兼容3E帧协议的通讯对象
+ Instantiate the communication object of Mitsubishi's Qna compatible 3E frame protocol +
+
+ + + 指定ip地址和端口号来实例化一个默认的对象
+ Specify the IP address and port number to instantiate a default object +
+ PLC的Ip地址 + PLC的端口 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 分析三菱R系列的地址,并返回解析后的数据对象 + + 字符串地址 + 是否解析成功 + + + + 从三菱地址,是否位读取进行创建读取的MC的核心报文 + + 地址数据 + 是否进行了位读取操作 + 带有成功标识的报文对象 + + + + 以字为单位,创建数据写入的核心报文 + + 三菱的数据地址 + 实际的原始数据信息 + 带有成功标识的报文对象 + + + + 以位为单位,创建数据写入的核心报文 + + 三菱的地址信息 + 原始的bool数组数据 + 带有成功标识的报文对象 + + + + 三菱MC-A1E协议的虚拟服务器,支持M,X,Y,D,W的数据池读写操作,支持二进制及ASCII格式进行读写操作,需要在实例化的时候指定。
+ The Mitsubishi MC-A1E protocol virtual server supports M, X, Y, D, W data pool read and write operations, + and supports binary and ASCII format read and write operations, which need to be specified during instantiation. +
+ + 本三菱的虚拟PLC仅限商业授权用户使用,感谢支持。 + 如果你没有可以测试的三菱PLC,想要测试自己开发的上位机软件,或是想要在本机实现虚拟PLC,然后进行IO的输入输出练习,都可以使用本类来实现,地址参考DEMO程序 + +
+ + + 实例化一个默认参数的mc协议的服务器
+ Instantiate a mc protocol server with default parameters +
+ 是否是二进制,默认是二进制,否则是ASCII格式 +
+ + + + + + + + + + + + + + + + + + 三菱PLC通讯类,采用UDP的协议实现,采用Qna兼容3E帧协议实现,需要在PLC侧先的以太网模块先进行配置,必须为二进制通讯
+ Mitsubishi PLC communication class is implemented using UDP protocol and Qna compatible 3E frame protocol. + The Ethernet module needs to be configured first on the PLC side, and it must be binary communication. +
+ + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 三菱PLC通讯类,采用Qna兼容3E帧协议实现,需要在PLC侧先的以太网模块先进行配置,必须为二进制通讯
+ Mitsubishi PLC communication class is implemented using Qna compatible 3E frame protocol. + The Ethernet module on the PLC side needs to be configured first. It must be binary communication. +
+ + 支持读写的数据类型详细参考API文档,支持高级的数据读取,例如读取智能模块,缓冲存储器等等。如果使用的Fx5u的PLC,如果之前有写过用户认证,需要对设备信息全部初始化 + + + 目前组件测试通过的PLC型号列表,有些来自于网友的测试 + Q06UDV PLC 感谢hwdq0012 + fx5u PLC 感谢山楂 + Q02CPU PLC + L02CPU PLC + + 地址的输入的格式支持多种复杂的地址表示方式: + + [商业授权] 扩展的数据地址: 表示为 ext=1;W100 访问扩展区域为1的W100的地址信息 + [商业授权] 缓冲存储器地址: 表示为 mem=32 访问地址为32的本站缓冲存储器地址 + [商业授权] 智能模块地址:表示为 module=3;4106 访问模块号3,偏移地址是4106的数据,偏移地址需要根据模块的详细信息来确认。 + [商业授权] 基于标签的地址: 表示位 s=AAA 假如标签的名称为AAA,但是标签的读取是有条件的,详细参照 + 普通的数据地址,参照下面的信息 + + + + + + + + + +
+ + + 实例化三菱的Qna兼容3E帧协议的通讯对象
+ Instantiate the communication object of Mitsubishi's Qna compatible 3E frame protocol +
+
+ + + 指定ip地址和端口号来实例化一个默认的对象
+ Specify the IP address and port number to instantiate a default object +
+ PLC的Ip地址 + PLC的端口 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 数据标签 + 读取的数据长度 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 三菱MC协议的虚拟服务器,支持M,X,Y,D,W的数据池读写操作,支持二进制及ASCII格式进行读写操作,需要在实例化的时候指定。
+ The Mitsubishi MC protocol virtual server supports M, X, Y, D, W data pool read and write operations, + and supports binary and ASCII format read and write operations, which need to be specified during instantiation. +
+ + 本三菱的虚拟PLC仅限商业授权用户使用,感谢支持。 + 如果你没有可以测试的三菱PLC,想要测试自己开发的上位机软件,或是想要在本机实现虚拟PLC,然后进行IO的输入输出练习,都可以使用本类来实现,先来说明下地址信息 +
+ 地址的输入的格式说明如下: + + + 地址名称 + 地址代号 + 示例 + 地址进制 + 字操作 + 位操作 + 备注 + + + 内部继电器 + M + M100,M200 + 10 + + + + + + 输入继电器 + X + X100,X1A0 + 16 + + + + + + 输出继电器 + Y + Y100,Y1A0 + 16 + + + + + + 数据寄存器 + D + D1000,D2000 + 10 + + × + + + + 链接寄存器 + W + W100,W1A0 + 16 + + × + + + +
+
+ + + 实例化一个默认参数的mc协议的服务器
+ Instantiate a mc protocol server with default parameters +
+ 是否是二进制,默认是二进制,否则是ASCII格式 +
+ + + + + + + + + + + + + + + + + + + + + 当收到mc协议的报文的时候应该触发的方法,允许继承重写,来实现自定义的返回,或是数据监听。
+ The method that should be triggered when a message of the mc protocol is received, + allowing inheritance to be rewritten to implement custom return or data monitoring. +
+ mc报文 + 返回的报文信息 +
+ + + 当收到mc协议的报文的时候应该触发的方法,允许继承重写,来实现自定义的返回,或是数据监听。
+ The method that should be triggered when a message of the mc protocol is received, + allowing inheritance to be rewritten to implement custom return or data monitoring. +
+ mc报文 + 返回的报文信息 +
+ + + 将状态码,数据打包成一个完成的回复报文信息 + + 状态信息 + 数据 + 状态信息 + + + + + + + + + + 释放当前的对象 + + 是否托管对象 + + + + 获取或设置当前的通信格式是否是二进制
+ Get or set whether the current communication format is binary +
+
+ + + + + + + + + 实例化一个二进制格式的mc协议的服务器 + + + + + 实例化一个默认参数的mc协议的服务器
+ Instantiate a mc protocol server with default parameters +
+ 是否是二进制,默认是二进制,否则是ASCII格式 +
+ + + 获取或设置一次接收时的数据长度,默认2KB数据长度 + + + + + + + + 重新开始接收数据 + + + + + + + + 三菱的串口通信的对象,适用于读取FX系列的串口数据,支持的类型参考文档说明
+ Mitsubishi's serial communication object is suitable for reading serial data of the FX series. Refer to the documentation for the supported types. +
+ + 一般老旧的型号,例如FX2N之类的,需要将设置为False,如果是FX3U新的型号,则需要将设置为True + + + + + +
+ + + 实例化一个默认的对象 + + + + + + + + + + + + + + + + + 获取或设置是否动态修改PLC的波特率,如果为 True,那么如果本对象设置了波特率 115200,就会自动修改PLC的波特率到 115200,因为三菱PLC再重启后都会使用默认的波特率9600
+ Get or set whether to dynamically modify the baud rate of the PLC. If it is True, then if the baud rate of this object is set to 115200, + the baud rate of the PLC will be automatically modified to 115200, because the Mitsubishi PLC is not After restart, the default baud rate of 9600 will be used +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + 在三菱的PLC通信的MC协议中,分为串行通信的报文和以太网接口的报文。
+ 在串口通信中,共有以下几种帧,其中1C,2C,3C帧支持格式1,2,3,4,在C帧里支持格式5通信
+ + 4C帧,QnA系列串行通信模块专用协议(Qna扩展帧) + 3C帧,QnA系列串行通信模块专用协议(Qna帧) + 2C帧,QnA系列串行通信模块专用协议(Qna简易帧) + 1C帧,A系列计算机链接模块专用协议 + + 在以太网通信中,共有以下几种帧,每种帧支持二进制和ASCII格式 + + 4E帧,是3E帧上附加了“序列号”。 + 3E帧,QnA系列以太网接口模块的报文格式,兼容SLMP的报文格式 + 1E帧,A系列以太网接口模块的报文格式 + + 在以太网通信里,HSL主要针对1E帧协议和3E帧协议进行实现,大概说一下怎么选择通信类对象,对于三菱PLC而言,需要事先在PLC侧的网络配置中进行 + 相关的配置操作,具体是配置二进制格式还是ASCII格式,然后配置端口,配置TCP还是UDP协议。
+ , 这四个类都是MC协议的Qna兼容3E帧实现,分别 + 是TCP二进制,TCP的ASCII,UDP的二进制,UDP的ASCI格式。适用Q系列,L系列,FX5U系列,还有以太网模块QJ71E71。
+ , 这两个类是MC协议的Qna兼容1E协议实现, + 分别是二进制和ASCII格式的实现,主要适用A系列的PLC,Fx3u,以及有些老的PLC,使用了北辰模块实现的通信也是选择的是 A1E 协议来通信。
+ 是MC协议的3C帧的实现,主要支持串行通信的模块的实现。
+ 是FX编程口的协议的实现,测试并不在所有的老型号上都很稳定。具体支持的系列需要参照类的说明, + 当使用GOT触摸屏连接PLC时,需要使用类并将属性设置为 True
+ 是三菱的计算机链接协议,通常是三菱的485接口,而不是编程口,该协议支持多种格式及是否和校验,实际参数选择需要根据PLC的配置来决定。
+
+ 三菱Q系列PLC带以太网模块,使用MC 二进制协议通讯,在网络中断情况下无法正常连接的情况,解决方案如下:
+ 1. 生存确认选择确认模式;
+ 2. 初始设置中将"对象目标生存确认开始间隔定时器"从1200改为12
+
+
+ + + HostLink的接口实现 + + + + + + + + + + + + + + + + + + + + + + + + + + HostLinkCMode协议的接口信息 + + + + + + + + + + + + + + + + + + + + + + + Fins协议的接口对象 + + + + + + + + + + + + + + + + + 欧姆龙的OmronHostLinkCMode的辅助类方法 + + + + + + 地址里可以额外指定单元号信息,例如 s=2;D100 + + + + + + + + + 地址里可以额外指定单元号信息,例如 s=2;D100 + + + + + + + + [商业授权] 读取PLC的当前的型号信息
+ [Authorization] Read the current model information of the PLC +
+ PLC连接对象 + 站号信息 + 型号 +
+ + + [商业授权] 读取PLC当前的操作模式,0: 编程模式 1: 运行模式 2: 监视模式
+ [Authorization] Reads the Operation mode of the CPU Unit. 0: PROGRAM mode 1: RUN mode 2: MONITOR mode +
+ PLC连接对象 + 站号信息 + 0: 编程模式 1: 运行模式 2: 监视模式 +
+ + + [商业授权] 将当前PLC的模式变更为指定的模式,0: 编程模式 1: 运行模式 2: 监视模式
+ [Authorization] Change the current PLC mode to the specified mode, 0: programming mode 1: running mode 2: monitoring mode +
+ PLC连接对象 + 站号信息 + 0: 编程模式 1: 运行模式 2: 监视模式 + 是否变更成功 +
+ + + 解析欧姆龙的数据地址,参考来源是Omron手册第188页,比如D100, E1.100
+ Analyze Omron's data address, the reference source is page 188 of the Omron manual, such as D100, E1.100 +
+ 数据地址 + 是否是位地址 + 是否读取 + 解析后的结果地址对象 +
+ + + 根据读取的地址,长度,是否位读取创建Fins协议的核心报文
+ According to the read address, length, whether to read the core message that creates the Fins protocol +
+ 地址,具体格式请参照示例说明 + 读取的数据长度 + 是否使用位读取 + 带有成功标识的Fins核心报文 +
+ + + 根据读取的地址,长度,是否位读取创建Fins协议的核心报文
+ According to the read address, length, whether to read the core message that creates the Fins protocol +
+ 地址,具体格式请参照示例说明 + 等待写入的数据 + 带有成功标识的Fins核心报文 +
+ + + 验证欧姆龙的Fins-TCP返回的数据是否正确的数据,如果正确的话,并返回所有的数据内容 + + 来自欧姆龙返回的数据内容 + 是否读取 + 带有是否成功的结果对象 + + + + 将普通的指令打包成完整的指令 + + fins指令 + 站号信息 + 完整的质量 + + + + 获取model的字符串描述信息 + + 型号代码 + 是否解析成功 + + + + 根据错误码的信息,返回错误的具体描述的文本
+ According to the information of the error code, return the text of the specific description of the error +
+ 错误码 + 错误的描述文本 +
+ + + 欧姆龙的OmronHostLink相关辅助方法 + + + + + 验证欧姆龙的Fins-TCP返回的数据是否正确的数据,如果正确的话,并返回所有的数据内容 + + 发送的报文信息 + 来自欧姆龙返回的数据内容 + 带有是否成功的结果对象 + + + + 根据错误信息获取当前的文本描述信息 + + 错误代号 + 文本消息 + + + + 将 fins 命令的报文打包成 HostLink 格式的报文信息,打包之后的结果可以直接发送给PLC
+ Pack the message of the fins command into the message information in the HostLink format, and the packaged result can be sent directly to the PLC +
+ HostLink协议的plc通信对象 + 站号信息 + fins命令 + 可发送PLC的完整的报文信息 +
+ + + + + + + 如果需要需要额外指定站号的话,在第一个地址里,使用 s=2;D100 这种携带地址的功能 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 欧姆龙PLC的CIP协议的类,支持NJ,NX,NY系列PLC,支持tag名的方式读写数据,假设你读取的是局部变量,那么使用 Program:MainProgram.变量名
+ Omron PLC's CIP protocol class, support NJ, NX, NY series PLC, support tag name read and write data, assuming you read local variables, then use Program: MainProgram. Variable name +
+
+ + + Instantiate a communication object for a OmronCipNet PLC protocol + + + + + Specify the IP address and port to instantiate a communication object for a OmronCipNet PLC protocol + + PLC IpAddress + PLC Port + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 欧姆龙的CIP虚拟服务器 + + + + + + + + + + + + + + + + + + + + + + + + + + 基于连接的对象访问的CIP协议的实现,用于对Omron PLC进行标签的数据读写,对数组,多维数组进行读写操作,支持的数据类型请参照API文档手册。
+ The implementation of the CIP protocol based on connected object access is used to read and write tag data to Omron PLC, + and read and write arrays and multidimensional arrays. For the supported data types, please refer to the API documentation manual. +
+ + 支持普通标签的读写,类型要和标签对应上。如果标签是数组,例如 A 是 INT[0...9] 那么Read("A", 1),返回的是10个short所有字节数组。 + 如果需要返回10个长度的short数组,请调用 ReadInt16("A[0], 10"); 地址必须写 "A[0]",不能写 "A" , 如需要读取结构体,参考 + + + 首先说明支持的类型地址,在PLC里支持了大量的类型,有些甚至在C#里是不存在的。现在做个统一的声明 + + + PLC类型 + 含义 + 代号 + C# 类型 + 备注 + + + bool + 位类型数据 + 0xC1 + bool + + + + SINT + 8位的整型 + 0xC2 + sbyte + 有符号8位很少用,HSL直接用byte + + + USINT + 无符号8位的整型 + 0xC6 + byte + 如需要,使用实现 + + + BYTE + 8位字符数据 + 0xD1 + byte + 如需要,使用实现 + + + INT + 16位的整型 + 0xC3 + short + + + + UINT + 无符号的16位整型 + 0xC7 + ushort + + + + DINT + 32位的整型 + 0xC4 + int + + + + UDINT + 无符号的32位整型 + 0xC8 + uint + + + + LINT + 64位的整型 + 0xC5 + long + + + + ULINT + 无符号的64位的整型 + 0xC9 + ulong + + + + REAL + 单精度浮点数 + 0xCA + float + + + + DOUBLE + 双精度浮点数 + 0xCB + double + + + + STRING + 字符串数据 + 0xD0 + string + 前两个字节为字符长度 + + + 8bit string BYTE + 8位的字符串 + 0xD1 + + 本质是BYTE数组 + + + 16bit string WORD + 16位的字符串 + 0xD2 + + 本质是WORD数组,可存放中文 + + + 32bit string DWORD + 32位的字符串 + 0xD2 + + 本质是DWORD数组,可存放中文 + + + 在读写操作之前,先看看怎么实例化和连接PLC
+ + 现在来说明以下具体的操作细节。我们假设有如下的变量:
+ CESHI_A SINT
+ CESHI_B BYTE
+ CESHI_C INT
+ CESHI_D UINT
+ CESHI_E SINT[0..9]
+ CESHI_F BYTE[0..9]
+ CESHI_G INT[0..9]
+ CESHI_H UINT[0..9]
+ CESHI_I INT[0..511]
+ CESHI_J STRING[12]
+ ToPc_ID1 ARRAY[0..99] OF STRING[20]
+ CESHI_O BOOL
+ CESHI_P BOOL[0..31]
+ 对 CESHI_A 来说,读写这么操作 + + 对于 CESHI_B 来说,写入的操作有点特殊 + + 对于 CESHI_C, CESHI_D 来说,就是 ReadInt16(string address) , Write( string address, short value ) 和 ReadUInt16(string address) 和 Write( string address, ushort value ) 差别不大。 + 所以我们着重来看看数组的情况,以 CESHI_G 标签为例子:
+ 情况一,我想一次读取这个标签所有的字节数组(当长度满足的情况下,会一次性返回数据) + + 情况二,我想读取第3个数,或是第6个数开始,一共5个数 + + 其他的数组情况都是类似的,我们来看看字符串 CESHI_J 变量 + + 对于 bool 变量来说,就是 ReadBool("CESHI_O") 和 Write("CESHI_O", true) 操作,如果是bool数组,就不一样了 + + 最后我们来看看结构体的操作,假设我们有个结构体
+ MyData.Code STRING(12)
+ MyData.Value1 INT
+ MyData.Value2 INT
+ MyData.Value3 REAL
+ MyData.Value4 INT
+ MyData.Value5 INT
+ MyData.Value6 INT[0..3]
+ 因为bool比较复杂,暂时不考虑。要读取上述的结构体,我们需要定义结构一样的数据 + + 定义好后,我们再来读取就很简单了。 + +
+
+ + + 实例化一个默认的对象 + + + + + 根据指定的IP及端口来实例化这个连接对象 + + PLC的Ip地址 + PLC的端口号信息 + + + + + + + 当前产品的型号信息
+ Model information of the current product +
+
+ + + 获取或设置不通信时超时的时间,默认02,为 32 秒,设置06 时为8分多,计算方法为 (2的x次方乘以8) 的秒数
+ Get or set the timeout time when there is no communication. The default is 02, which is 32 seconds, and when 06 is set, it is more than 8 minutes. The calculation method is (2 times the power of x times 8) seconds. +
+
+ + + + + + + + + + + + [商业授权] 读取一个结构体的对象,需要事先根据实际的数据点位定义好结构体,然后使用本方法进行读取,当结构体定义不对时,本方法将会读取失败
+ [Authorization] To read a structure object, you need to define the structure in advance according to the actual data points, + and then use this method to read. When the structure definition is incorrect, this method will fail to read +
+ + 本方法需要商业授权支持,具体的使用方法,参考API文档的示例代码 + + + 我们来看看结构体的操作,假设我们有个结构体
+ MyData.Code STRING(12)
+ MyData.Value1 INT
+ MyData.Value2 INT
+ MyData.Value3 REAL
+ MyData.Value4 INT
+ MyData.Value5 INT
+ MyData.Value6 INT[0..3]
+ 因为bool比较复杂,暂时不考虑。要读取上述的结构体,我们需要定义结构一样的数据 + + 定义好后,我们再来读取就很简单了。 + +
+ 结构体的类型 + 结构体对象的地址 + 是否读取成功的对象 +
+ + + + + + + + + 获取传递的最大长度的字节信息 + + 字节长度 + + + + + + + + + + 读取bool数据信息,如果读取的是单bool变量,就直接写变量名,如果是 bool 数组,就
+ Read a single bool data information, if it is a single bool variable, write the variable name directly, + if it is a value of a bool array composed of int, it is always accessed with "i=" at the beginning, for example, "i=A[0]" +
+ 节点的名称 -> Name of the node + 读取的数组长度信息 + 带有结果对象的结果数据 -> Result data with result info +
+ + + 读取PLC的byte类型的数据
+ Read the byte type of PLC data +
+ 节点的名称 -> Name of the node + 带有结果对象的结果数据 -> Result data with result info +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 读取字符串数据,默认为UTF-8编码
+ Read string data, default is UTF-8 encoding +
+ 起始地址 + 数据长度 + 带有成功标识的string数据 + + 以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码: + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 欧姆的Cpu的单元信息数据类 + + + + + 实例化一个默认的对象 + + + + + 根据原始的数据来实例化相关的CPU单元信息 + + 原始字节数 + + + + Cpu unit Model + + + + + CPU Unit internal system version + + + + + Largest number, 0 to 19, in CPU Unit’s EM area. + + + + + Maximum size of usable program area,unit: k words + + + + + The size of the area (CIO, WR, HR, AR, timer/counter completion flags, TN) in which bit commands can be used( always 23). unit: bytes + + + + + Total words in the DM area (always 32,768) + + + + + Among the banks in the EM area, the number of banks(0 to D ) without file memory + + + Banks (1 bank = 32,768 words) + + + + + Maximum number of timers/counters available (always 8) + + + + + 欧姆龙Cpu的状态信息 + + + + + 实例化一个默认的对象 + + + + + 从原始的字节数组来实例化一个 + + 原始的字节数据 + + + + Run 或是 Stop + + + + + No 或是 Present + + + + + Normal 或是 Standby + + + + + PROGRAM, MONITOR, RUN + + + + + Among errors that occur when the command is executed, the error code indicates the most serious. If there are no errors, it will be 0000 (hex) + + + + + Indicates messages from execution of FAL(006) or FALS(007). If there is no error message, + or if FAL(006) or FALS(007) are not being executed, 16 spaces( ASCII 20) will be returned. + + + + + + + + 欧姆龙的Fins协议的数据类型 + + + + + 实例化一个Fins的数据类型 + + 进行位操作的指令 + 进行字操作的指令 + + + + 进行位操作的指令 + + + + + 进行字操作的指令 + + + + + DM Area + + + + + CIO Area + + + + + Work Area + + + + + Holding Bit Area + + + + + Auxiliary Bit Area + + + + + TIM Area + + + + + 欧姆龙PLC通讯类,采用Fins-Tcp通信协议实现,支持的地址信息参见api文档信息。本协议下PLC默认的端口号为 9600,也可以手动更改,重启PLC更改生效。
+ Omron PLC communication class is implemented using Fins-Tcp communication protocol. For the supported address information, please refer to the api document information. + The default port number of the PLC under this protocol is 9600, and it can also be changed manually. Restart the PLC to make the changes take effect. +
+ + PLC的IP地址的要求,最后一个整数的范围应该小于250,否则会发生连接不上的情况。 +
+ 如果在测试的时候报错误码64,经网友 上海-Lex 指点,是因为PLC中产生了报警,如伺服报警,模块错误等产生的,但是数据还是能正常读到的,屏蔽64报警或清除plc错误可解决 +
+ 如果碰到NX系列连接失败,或是无法读取的,需要使用网口2,配置ip地址,网线连接网口2,配置FINSTCP,把UDP的端口改成9601的,这样就可以读写了。
+ 需要特别注意属性,在超长数据读取时,规定了切割读取的长度,在不是CP1H及扩展模块的时候,可以设置为999,提高一倍的通信速度。 +
+ + + + 下面演示下各种类型的读写操作 + + + 如果想要一次性读取不同类型的数据的话,可以读取byte[],然后自行解析 + + + 读写bool的示例代码 + + + 以下演示随机字读取的例子,在某些情况下可以更加的高性能 + + +
+ + + 实例化一个欧姆龙PLC Fins帧协议的通讯对象
+ Instantiate a communication object of Omron PLC Fins frame protocol +
+
+ + + 指定ip地址和端口号来实例化一个欧姆龙PLC Fins帧协议的通讯对象
+ Specify the IP address and port number to instantiate a communication object of the Omron PLC Fins frame protocol +
+ PLCd的Ip地址 + PLC的端口 +
+ + + + + + 信息控制字段,默认0x80
+ Information control field, default 0x80 +
+
+ + + 系统使用的内部信息
+ Internal information used by the system +
+
+ + + 网络层信息,默认0x02,如果有八层消息,就设置为0x07
+ Network layer information, default is 0x02, if there are eight layers of messages, set to 0x07 +
+
+ + + PLC的网络号地址,默认0x00
+ PLC network number address, default 0x00 +
+ + 00: Local network
+ 01-7F: Remote network address (decimal: 1 to 127) +
+
+ + + PLC的节点地址,默认为0,在和PLC连接的过程中,自动从PLC获取到DA1的值。
+ The node address of the PLC is 0 by default. During the process of connecting with the PLC, the value of DA1 is automatically obtained from the PLC. +
+
+ + + PLC的单元号地址,通常都为0
+ PLC unit number address, usually 0 +
+ + 00: CPU Unit
+ FE: Controller Link Unit or Ethernet Unit connected to network
+ 10 TO 1F: CPU Bus Unit
+ E1: Inner Board +
+
+ + + 上位机的网络号地址
+ Network number and address of the computer +
+ + 00: Local network
+ 01-7F: Remote network (1 to 127 decimal) +
+
+ + + 上位机的节点地址,默认是0x01,当连接PLC之后,将由PLC来设定当前的值。
+ The node address of the host computer is 0x01 by default. After connecting to the PLC, the PLC will set the current value. +
+ + v9.6.5版本及之前的版本都需要手动设置,如果是多连接,相同的节点是连接不上PLC的。 + +
+ + + 上位机的单元号地址
+ Unit number and address of the computer +
+ + 00: CPU Unit
+ 10-1F: CPU Bus Unit +
+
+ + + 设备的标识号
+ Service ID. Used to identify the process generating the transmission. + Set the SID to any number between 00 and FF +
+
+ + + 进行字读取的时候对于超长的情况按照本属性进行切割,默认500,如果不是CP1H及扩展模块的,可以设置为999,可以提高一倍的通信速度。
+ When reading words, it is cut according to this attribute for the case of overlength. The default is 500. + If it is not for CP1H and expansion modules, it can be set to 999, which can double the communication speed. +
+
+ + + 将普通的指令打包成完整的指令 + + FINS的核心指令 + 完整的可用于发送PLC的命令 + + + + + + + + + + + + + + + + + 假设起始地址为D100,D100存储了温度,100.6℃值为1006,D101存储了压力,1.23Mpa值为123,D102,D103存储了产量计数,读取如下: + + 以下是读取不同类型数据的示例 + + + + + + + 假设起始地址为D100,D100存储了温度,100.6℃值为1006,D101存储了压力,1.23Mpa值为123,D102,D103存储了产量计数,读取如下: + + 以下是写入不同类型数据的示例 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Omron PLC的FINS协议相关的辅助类,主要是一些地址解析,读写的指令生成。
+ The auxiliary classes related to the FINS protocol of Omron PLC are mainly some address resolution and the generation of read and write instructions. +
+
+ + + 同时读取多个地址的命令报文信息 + + 多个地址 + 命令报文信息 + + + + 根据读取的地址,长度,是否位读取创建Fins协议的核心报文
+ According to the read address, length, whether to read the core message that creates the Fins protocol +
+ 地址,具体格式请参照示例说明 + 读取的数据长度 + 是否使用位读取 + 读取的长度切割,默认500 + 带有成功标识的Fins核心报文 +
+ + + + + + 根据写入的地址,数据,是否位写入生成Fins协议的核心报文
+ According to the written address, data, whether the bit is written to generate the core message of the Fins protocol +
+ 地址内容,具体格式请参照示例说明 + 实际的数据 + 是否位数据 + 带有成功标识的Fins核心报文 +
+ + + 验证欧姆龙的Fins-TCP返回的数据是否正确的数据,如果正确的话,并返回所有的数据内容
+ Verify that the data returned by Omron's Fins-TCP is correct data, if correct, and return all data content +
+ 来自欧姆龙返回的数据内容 + 带有是否成功的结果对象 +
+ + + 验证欧姆龙的Fins-Udp返回的数据是否正确的数据,如果正确的话,并返回所有的数据内容
+ Verify that the data returned by Omron's Fins-Udp is correct data, if correct, and return all data content +
+ 来自欧姆龙返回的数据内容 + 带有是否成功的结果对象 +
+ + + 根据欧姆龙返回的错误码,获取错误信息的字符串描述文本
+ According to the error code returned by Omron, get the string description text of the error message +
+ 错误码 + 文本描述 +
+ + + 从欧姆龙PLC中读取想要的数据,返回读取结果,读取长度的单位为字,地址格式为"D100","C100","W100","H100","A100"
+ Read the desired data from the Omron PLC and return the read result. The unit of the read length is word. The address format is "D100", "C100", "W100", "H100", "A100" +
+ PLC设备的连接对象 + 读取地址,格式为"D100","C100","W100","H100","A100" + 读取的数据长度 + 分割信息 + 带成功标志的结果数据对象 +
+ + + 从欧姆龙PLC中读取多个地址的数据,返回读取结果,每个地址按照字为单位读取,地址格式为"D100","C100","W100","H100","A100" + + PLC设备的连接对象 + 从欧姆龙PLC中读取多个地址的数据,返回读取结果,每个地址按照字为单位读取,地址格式为"D100","C100","W100","H100","A100" + 带成功标志的结果数据对象 + + + + 向PLC写入数据,数据格式为原始的字节类型,地址格式为"D100","C100","W100","H100","A100"
+ Write data to PLC, the data format is the original byte type, and the address format is "D100", "C100", "W100", "H100", "A100" +
+ PLC设备的连接对象 + 初始地址 + 原始的字节数据 + 结果 +
+ + + + + + + + + + + + 从欧姆龙PLC中批量读取位软元件,地址格式为"D100.0","C100.0","W100.0","H100.0","A100.0"
+ Read bit devices in batches from Omron PLC with address format "D100.0", "C100.0", "W100.0", "H100.0", "A100.0" +
+ PLC设备的连接对象 + 读取地址,格式为"D100","C100","W100","H100","A100" + 读取的长度 + 分割信息 + 带成功标志的结果数据对象 +
+ + + 向PLC中位软元件写入bool数组,返回是否写入成功,比如你写入D100,values[0]对应D100.0,地址格式为"D100.0","C100.0","W100.0","H100.0","A100.0"
+ Write the bool array to the PLC's median device and return whether the write was successful. For example, if you write D100, values [0] corresponds to D100.0 + and the address format is "D100.0", "C100.0", "W100. 0 "," H100.0 "," A100.0 " +
+ PLC设备的连接对象 + 要写入的数据地址 + 要写入的实际数据,可以指定任意的长度 + 返回写入结果 +
+ + + + + + + + + 将CPU单元的操作模式更改为RUN,从而使PLC能够执行其程序。
+ Changes the CPU Unit’s operating mode to RUN, enabling the PLC to execute its program. +
+ + 当执行RUN时,CPU单元将开始运行。 在执行RUN之前,您必须确认系统的安全性。 启用“禁止覆盖受保护程序”设置时,无法执行此命令。
+ The CPU Unit will start operation when RUN is executed. You must confirm the safety of the system before executing RUN. + When the “prohibit overwriting of protected program” setting is enabled, this command cannot be executed. +
+ PLC设备的连接对象 + 是否启动成功 +
+ + + + + + 将CPU单元的操作模式更改为PROGRAM,停止程序执行。
+ Changes the CPU Unit’s operating mode to PROGRAM, stopping program execution. +
+ + 当执行STOP时,CPU单元将停止操作。 在执行STOP之前,您必须确认系统的安全性。
+ The CPU Unit will stop operation when STOP is executed. You must confirm the safety of the system before executing STOP. +
+ PLC设备的连接对象 + 是否停止成功 +
+ + + + + + [商业授权] 读取CPU的一些数据信息,主要包含型号,版本,一些数据块的大小
+ [Authorization] Read some data information of the CPU, mainly including the model, version, and the size of some data blocks +
+ PLC设备的连接对象 + 是否读取成功 +
+ + + + + + [商业授权] 读取CPU单元的一些操作状态数据,主要包含运行状态,工作模式,错误信息等。
+ [Authorization] Read some operating status data of the CPU unit, mainly including operating status, working mode, error information, etc. +
+ PLC设备的连接对象 + 是否读取成功 +
+ + + + + + 欧姆龙的虚拟服务器,支持DM区,CIO区,Work区,Hold区,Auxiliary区,可以方便的进行测试
+ Omron's virtual server supports DM area, CIO area, Work area, Hold area, and Auxiliary area, which can be easily tested +
+
+ + + 实例化一个Fins协议的服务器
+ Instantiate a Fins protocol server +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + 当收到mc协议的报文的时候应该触发的方法,允许继承重写,来实现自定义的返回,或是数据监听。
+ The method that should be triggered when a message of the mc protocol is received is allowed to be inherited and rewritten to achieve a custom return or data monitoring. +
+ mc报文 + 返回的报文信息 +
+ + + 将核心报文打包的方法,追加报文头
+ The method of packing the core message, adding the message header +
+ 错误码 + Fins的核心报文 + 核心的内容 + 完整的报文信息 +
+ + + + + + + + + + + + + + + 欧姆龙的Udp协议的实现类,地址类型和Fins-TCP一致,无连接的实现,可靠性不如
+ Omron's Udp protocol implementation class, the address type is the same as Fins-TCP, + and the connectionless implementation is not as reliable as +
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 实例化一个默认的对象
+ Instantiate a default object +
+
+ + + 获取或设置一次接收时的数据长度,默认2KB数据长度 + + + + + + + + + + + 重新开始接收数据 + + + + + + + + 欧姆龙的HostLink协议的实现,地址支持示例 DM区:D100; CIO区:C100; Work区:W100; Holding区:H100; Auxiliary区: A100
+ Implementation of Omron's HostLink protocol, address support example DM area: D100; CIO area: C100; Work area: W100; Holding area: H100; Auxiliary area: A100 +
+ + 感谢 深圳~拾忆 的测试,地址可以携带站号信息,例如 s=2;D100 +
+ + 如果发现串口线和usb同时打开才能通信的情况,需要按照如下的操作:
+ 串口线不是标准的串口线,电脑的串口线的235引脚分别接PLC的329引脚,45线短接,就可以通讯,感谢 深圳-小君(QQ932507362)提供的解决方案。 +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 初始化串口信息,9600波特率,7位数据位,1位停止位,偶校验
+ Initial serial port information, 9600 baud rate, 7 data bits, 1 stop bit, even parity +
+ 端口号信息,例如"COM3" +
+ + + 初始化串口信息,波特率,7位数据位,1位停止位,偶校验
+ Initializes serial port information, baud rate, 7-bit data bit, 1-bit stop bit, even parity +
+ 端口号信息,例如"COM3" + 波特率 +
+ + + + + + + + + + + + + + + + + + + + + 欧姆龙的HostLink的C-Mode实现形式,地址支持携带站号信息,例如:s=2;D100
+ Omron's HostLink C-Mode implementation form, the address supports carrying station number information, for example: s=2;D100 +
+ + 暂时只支持的字数据的读写操作,不支持位的读写操作。另外本模式下,程序要在监视模式运行才能写数据,欧姆龙官方回复的。 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 欧姆龙的HostLink的C-Mode实现形式,当前的类是通过以太网透传实现。地址支持携带站号信息,例如:s=2;D100
+ The C-Mode implementation form of Omron’s HostLink, the current class is realized through Ethernet transparent transmission. + Address supports carrying station number information, for example: s=2;D100 +
+ + 暂时只支持的字数据的读写操作,不支持位的读写操作。另外本模式下,程序要在监视模式运行才能写数据,欧姆龙官方回复的。 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 欧姆龙的HostLinkCMode协议的虚拟服务器 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 欧姆龙的HostLink协议的实现,基于Tcp实现,地址支持示例 DM区:D100; CIO区:C100; Work区:W100; Holding区:H100; Auxiliary区: A100
+ Implementation of Omron's HostLink protocol, based on tcp protocol, address support example DM area: D100; CIO area: C100; Work area: W100; Holding area: H100; Auxiliary area: A100 +
+ + 感谢 深圳~拾忆 的测试,地址可以携带站号信息,例如 s=2;D100 +
+ + 如果发现串口线和usb同时打开才能通信的情况,需要按照如下的操作:
+ 串口线不是标准的串口线,电脑的串口线的235引脚分别接PLC的329引脚,45线短接,就可以通讯,感谢 深圳-小君(QQ932507362)提供的解决方案。 +
+
+
+ + + + + + + + + + + + + + + Specifies whether or not there are network relays. Set “80” (ASCII: 38,30) + when sending an FINS command to a CPU Unit on a network.Set “00” (ASCII: 30,30) + when sending to a CPU Unit connected directly to the host computer. + + + + + + + + + + + + + + The response wait time sets the time from when the CPU Unit receives a command block until it starts + to return a response.It can be set from 0 to F in hexadecimal, in units of 10 ms. + If F(15) is set, the response will begin to be returned 150 ms (15 × 10 ms) after the command block was received. + + + + + PLC设备的站号信息
+ PLC device station number information +
+
+ + + 进行字读取的时候对于超长的情况按照本属性进行切割,默认260。
+ When reading words, it is cut according to this attribute for the case of overlength. The default is 260. +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 欧姆龙的HostLink虚拟服务器,支持DM区,CIO区,Work区,Hold区,Auxiliary区,可以方便的进行测试
+ Omron's HostLink virtual server supports DM area, CIO area, Work area, Hold area, and Auxiliary area, which can be easily tested +
+ + 支持TCP的接口以及串口,方便客户端进行测试,或是开发用于教学的虚拟服务器对象 + +
+ + + + + + + + + + + + + + + + + + + + + + + + 报警类消息功能方法 + + + + + 指定Open通信类实例化一个对象 + + 开放协议的对象 + + + + A subscription for the alarms that can appear in the controller. + + 是否订阅成功的结果对象 + + + + Reset the subscription for the controller alarms + + 取消订阅是否成功的结果对象 + + + + The integrator can remotely acknowledge the current alarm on the controller by sending MID 0078. If no alarm is currently active when the controller receives the command, the command will be rejected. + + 是否操作成功的结果对象 + + + + Job message + + + + + 指定Open协议实例化一个任务消息对象 + + 连接通道 + + + + This is a request for a transmission of all the valid Job IDs of the controller. The result of this command is a transmission of all the valid Job IDs. + + Revision + 任务ID的列表信息 + + + + Request to upload the data for a specific Job from the controller. + + job id + 任务数据的结果对象 + + + + A subscription for the Job info. MID 0035 Job info is sent to the integrator when a new Job is selected and after each tightening performed during the Job. + + 是否成功的结果对象 + + + + Reset the subscription for a Job info message. + + 是否成功的结果对象 + + + + Message to select Job. If the requested ID is not present in the controller, then the command will not be performed. + + Job ID + Revision + 是否成功的结果对象 + + + + Job restart message. + + Job ID + 是否成功的结果对象 + + + + Job data + + + + + Job ID + + + + + Job name + + + + + Forced order: 0=free order, 1=forced order, 2=free and forced + + + + + Max time for first tightening + + + + + Max time to complete Job + + + + + Job batch mode + + + + + Lock at Job done + + + + + Use line control + + + + + Repeat Job + + + + + Tool loosening: 0=Enable, 1=Disable, 2=Enable only on NOK tightening + + + + + Reserved for Job repair. 0=E, 1=G + + + + + A list of parameter sets + + + + + JobItem + + + + + 实例化一个默认的对象 + + + + + 指定原始数据实例化一个对象信息 + + 等待分析的原始数据,例如:15:011:0:22 + + + + Channel-ID + + + + + Type-ID + + + + + AutoValue + + + + + BatchSize + + + + + Open协议的消息对象信息 + + + + + 实例化一个默认的对象 + + + + + 指定Open的消息来实例化对象 + + Open内容 + + + + Open协议的消息内容 + + + + + 开放以太网协议,在拧紧枪中应用广泛,本通信支持基本的问答机制以及订阅机制,支持完全自定义的参数指定及数据读取。
+ Open Ethernet protocol, widely used in tightening guns, this communication supports basic question answering mechanism and subscription mechanism, supports fully customized parameter specification and data reading. +
+ + 自定义的读取使用来实现,如果是订阅的数据,使用绑定自己的方法触发。更详细的示例参考:http://api.hslcommunication.cn
+ Custom reads are implemented using , and if it is subscribed data, use + bind your own method to trigger it. For a more detailed example, refer to: http://api.hslcommunication.cn +
+ + + + + +
+ + + 实例化一个默认的对象
+ Instantiate a default object +
+
+ + + 使用指定的IP地址及端口来初始化对象
+ Use the specified IP address and port to initialize the object +
+ Ip地址 + 端口号 +
+ + + + + + + + + + + + + + + + + + 使用自定义的命令读取数据,需要指定每个参数信息,然后返回字符串数据内容,根据实际的功能码,解析出实际的数据信息
+ To use a custom command to read data, you need to specify each parameter information, then return the string data content, and parse the actual data information according to the actual function code +
+ The MID is four bytes long and is specified by four ASCII digits(‘0’…’9’). The MID describes how to interpret the message. + The revision of the MID is specified by three ASCII digits(‘0’…’9’).The MID revision is unique per MID and is used in case several versions are available for the same MID. + The station the message is addressed to in the case of controller with multi-station configuration.The station ID is 1 byte long and is specified by one ASCII digit(‘0’…’9’). + The spindle the message is addressed to in the case several spindles are connected to the same controller. The spindle ID is 2 bytes long and is specified by two ASCII digits (‘0’…’9’). + The Data Field is ASCII data representing the data. The data contains a list of parameters depending on the MID.Each parameter is represented with an ID and the parameter value. + 结果数据信息 +
+ + + + + + 参数集合操作的相关属性,可以用来获取参数ID列表,设置数据等操作。
+ The properties related to parameter collection operations can be used to obtain parameter ID lists, set data, and other operations. +
+
+ + + 任务消息的相关属性,可以用来获取任务的数据,订阅任务,取消订阅任务,选择任务,启动任务。
+ The relevant properties of task messages can be used to obtain task data, subscribe to tasks, unsubscribe tasks, select tasks, and start tasks. +
+
+ + + 拧紧结果消息的操作属性 + + + + + 工具消息的操作属性 + + + + + 时间消息的属性 + + + + + 当接收到OpenProtocol协议消息触发的事件 + + + + + + + + 构建一个读取的初始报文 + + The MID is four bytes long and is specified by four ASCII digits(‘0’…’9’). The MID describes how to interpret the message. + The revision of the MID is specified by three ASCII digits(‘0’…’9’).The MID revision is unique per MID and is used in case several versions are available for the same MID. + The station the message is addressed to in the case of controller with multi-station configuration.The station ID is 1 byte long and is specified by one ASCII digit(‘0’…’9’). + The spindle the message is addressed to in the case several spindles are connected to the same controller. The spindle ID is 2 bytes long and is specified by two ASCII digits (‘0’…’9’). + The Data Field is ASCII data representing the data. The data contains a list of parameters depending on the MID.Each parameter is represented with an ID and the parameter value. + 原始字节的报文信息 + + + + 检查请求返回的消息是否合法的 + + 返回的消息 + 是否合法的结果对象 + + + + 参数设置相关的类 + + + + + 指定Open通信类实例化一个对象 + + 开放协议的对象 + + + + A request to get the valid parameter set IDs from the controller. + + IDs + + + + Request to upload parameter set data from the controller. + + parameter set id + parameter set data + + + + A subscription for the parameter set selection. Each time a new parameter set is selected the MID 0015 Parameter set selected is sent to the integrator. + + 是否成功的结果对象 + + + + Reset the subscription for the parameter set selection. + + 是否成功的结果对象 + + + + Select a parameter set. + + id + 是否选择成功的结果对象 + + + + This message gives the possibility to set the batch size of a parameter set at run time. + + Parameter set ID + Batch size + 是否成功的结果对象 + + + + This message gives the possibility to reset the batch counter of the running parameter set, at run time. + + Parameter set ID + 是否操作成功的结果对象 + + + + parameter set data + + + + + Parameter set ID
+ 参数设置ID +
+
+ + + Parameter set name
+ 参数设置名称 +
+
+ + + Rotation direction, CW: 顺时针, CCW: 逆时针
+ 旋转方向,CW: 顺时针, CCW: 逆时针 +
+
+ + + Batch size + + + + + Torque min
+ 最小力矩 +
+
+ + + Torque max
+ 最大力矩 +
+
+ + + Torque final target
+ 最终目标力矩 +
+
+ + + Angle min
+ 最小角度 +
+
+ + + Angle max
+ 最大角度 +
+
+ + + The target angle is specified in degree
+ 指定的目标角度 +
+
+ + + 拧紧结果消息 + + + + + 指定Open通信类实例化一个对象 + + 开放协议的对象 + + + + Set the subscription for the result tightenings. The result of this command will be the transmission of the tightening result after the tightening is performed( push function ). + + + The MID revision in the header is used to subscribe to different revisions of MID 0061 Last tightening result data upload reply. + + Revision + 是否订阅成功的结果对象 + + + + Reset the last tightening result subscription. + + 取消订阅是否成功的结果对象 + + + + Time messages + + + + + 指定Open通信类实例化一个对象 + + 开放协议的对象 + + + + Read time request. + + 包含时间的结果对象 + + + + Set the time in the controller. + + 指定的时间 + 是否设置成功的结果对象 + + + + 工具类消息 + + + + + 指定Open通信来实例化一个工具类消息的对象 + + 工具类消息 + + + + A request for some of the data stored in the tool. The result of this command is the transmission of the tool data. + + Revision + 工具数据的结果对象 + + + + Disable tool. + + 是否成功的结果对象 + + + + Enable tool + + 是否成功的结果对象 + + + + This command is sent by the integrator in order to request the possibility to disconnect the tool from the controller.The command is rejected if the tool is currently used. + + 是否成功的结果对象 + + + + This message is sent by the integrator in order to set the calibration value of the tool. + + The unit in which the calibration value is sent. 1=Nm, 2=Lbf.ft, 3=Lbf.In, 4=Kpm + The calibration value + 是否成功的结果对象 + + + + Tool data + + + + + Tool serial number + + + + + Tool number of tightening + + + + + Last calibration date
+ 上次校准日期 +
+
+ + + Controller serial number + + + + + Calibration value
+ 校准值 +
+
+ + + Last service date + + + + + Tightenings since service + + + + + Tool type: 01=S-tool, 02=DS-tool, 03=Ref. transducer, 04=ST-tool, 05=EPtool, 06=ETX-tool, 07=SL-tool, 08=DL-tool, 09=STB(offline), 10=STB( online), 11=QST-tool + + + + + Motor size + + + + + use open end + + + + + tightening direction: CW=顺时针, CCW=逆时针. + + + + + motor rotation: 0=normal, 1=inverted. + + + + + Controller software version + + + + + Mewtocol协议的辅助类信息 + + + + + 读取单个的地址信息的bool值,地址举例:SR0.0 X0.0 Y0.0 R0.0 L0.0
+ Read the bool value of a single address, for example: SR0.0 X0.0 Y0.0 R0.0 L0.0 +
+ PLC通信对象 + 站号信息 + 起始地址 + 读取结果对象 +
+ + + 批量读取松下PLC的位数据,按照字为单位,地址为 X0,X10,Y10,读取的长度为16的倍数
+ Read the bit data of Panasonic PLC in batches, the unit is word, the address is X0, X10, Y10, and the read length is a multiple of 16 +
+ PLC通信对象 + 站号信息 + 起始地址 + 数据长度 + 读取结果对象 +
+ + + 批量读取松下PLC的位数据,传入一个读取的地址列表,地址支持X,Y,R,T,C,L, 举例:R1.0, X2.0, R3.A
+ Batch read the bit data of Panasonic PLC, pass in a read address list, the address supports X, Y, R, T, C, L, for example: R1.0, X2.0, R3.A +
+ PLC通信对象 + 站号信息 + 等待读取的地址列表,数组长度不限制 + 读取结果对象 +
+ + + 往指定的地址写入bool数据,地址举例:SR0.0 X0.0 Y0.0 R0.0 L0.0
+ Write bool data to the specified address. Example address: SR0.0 X0.0 Y0.0 R0.0 L0.0 +
+ PLC通信对象 + 站号信息 + 起始地址 + 数据值信息 + 返回是否成功的结果对象 +
+ + + 往指定的地址写入 数组,地址举例 X0.0 Y0.0 R0.0 L0.0, + 起始的位地址必须为16的倍数,写入的 数组长度也为16的倍数。
+ Write the array to the specified address, address example: SR0.0 X0.0 Y0.0 R0.0 L0.0, + the starting bit address must be a multiple of 16. The length of the array is also a multiple of 16.
+
+ PLC通信对象 + 站号信息 + 起始地址 + 数据值信息 + 返回是否成功的结果对象 +
+ + + 将Bool数组值写入到指定的离散地址里,一个地址对应一个bool值,地址数组长度和值数组长度必须相等,地址支持X,Y,R,T,C,L, 举例:R1.0, X2.0, R3.A
+ Write the Bool array value to the specified discrete address, one address corresponds to one bool value, + the length of the address array and the length of the value array must be equal, the address supports X, Y, R, T, C, L, for example: R1.0, X2.0, R3.A +
+ PLC通信对象 + 站号信息 + 离散的地址列表 + bool数组值 + 是否写入成功的结果对象 +
+ + + 读取指定地址的原始数据,地址示例:D0 F0 K0 T0 C0, 地址支持携带站号的访问方式,例如:s=2;D100
+ Read the original data of the specified address, address example: D0 F0 K0 T0 C0, the address supports carrying station number information, for example: s=2;D100 +
+ PLC通信对象 + 站号信息 + 起始地址 + 长度 + 原始的字节数据的信息 +
+ + + 将数据写入到指定的地址里去,地址示例:D0 F0 K0 T0 C0, 地址支持携带站号的访问方式,例如:s=2;D100
+ Write data to the specified address, address example: D0 F0 K0 T0 C0, the address supports carrying station number information, for example: s=2;D100 +
+ PLC对象 + 站号信息 + 起始地址 + 真实数据 + 是否写入成功 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + 读取PLC的型号信息
+ Read the model information of the PLC +
+ 通信对象 + 站号信息 + PLC型号 +
+ + + 松下PLC的辅助类,提供了基本的辅助方法,用于解析地址,计算校验和,创建报文
+ The auxiliary class of Panasonic PLC provides basic auxiliary methods for parsing addresses, calculating checksums, and creating messages +
+
+ + + 位地址转换方法,101等同于10.1等同于10*16+1=161
+ Bit address conversion method, 101 is equivalent to 10.1 is equivalent to 10 * 16 + 1 = 161 +
+ 地址信息 + 倍率信息 + 实际的位地址信息 +
+ + + 解析数据地址,解析出地址类型,起始地址
+ Parse the data address, resolve the address type, start address +
+ 数据地址 + 解析出地址类型,起始地址 +
+ + + 将松下的命令打包成带有%开头,CRC校验,CR结尾的完整的命令报文。如果参数 useExpandedHeader 设置为 Ture,则命令头使用 < 开头 + + 站号信息 + 松下的命令。例如 RCSR100F + 设置是否使用扩展的命令头消息 + 原始的字节数组的命令 + + + + 创建读取离散触点的报文指令
+ Create message instructions for reading discrete contacts +
+ 站号信息 + 地址信息 + 包含是否成功的结果对象 +
+ + + 创建读取多个bool值得报文命令 + + 站号信息 + 等待读取的地址数组 + 包含是否成功的结果对象 + + + + 创建写入离散触点的报文指令
+ Create message instructions to write discrete contacts +
+ 站号信息 + 地址信息 + bool值数组 + 包含是否成功的结果对象 +
+ + + 创建写入多个离散触点的报文指令 + + 站号信息 + 等待写入的地址列表 + 等待写入的值列表,长度应和地址长度一致 + 所有写入命令的报文列表 + + + + 创建批量读取触点的报文指令
+ Create message instructions for batch reading contacts +
+ 站号信息 + 地址信息 + 数据长度 + 是否进行位为单位 + 包含是否成功的结果对象 +
+ + + 创建批量读取触点的报文指令
+ Create message instructions for batch reading contacts +
+ 设备站号 + 地址信息 + 数据值 + 包含是否成功的结果对象 +
+ + + 构建获取PLC型号的报文命令 + + 站号信息 + 读取PLC型号的命令报文信息 + + + + 检查从PLC反馈的数据,并返回正确的数据内容
+ Check the data feedback from the PLC and return the correct data content +
+ 反馈信号 + 是否解析数据内容部分 + 是否成功的结果信息 +
+ + + 检查从PLC反馈的数据,并返回正确的数据内容
+ Check the data feedback from the PLC and return the correct data content +
+ 反馈信号 + 是否成功的结果信息 +
+ + + 根据错误码获取到错误描述文本
+ Get the error description text according to the error code +
+ 错误代码 + 字符信息 +
+ + + 根据MC的错误码去查找对象描述信息 + + 错误码 + 描述信息 + + + + 松下PLC的数据读写类,基于MC协议的实现,具体的地址格式请参考备注说明
+ Data reading and writing of Panasonic PLC, based on the implementation of the MC protocol, please refer to the note for specific address format +
+
+ + + 实例化松下的的Qna兼容3E帧协议的通讯对象
+ Instantiate Panasonic's Qna compatible 3E frame protocol communication object +
+
+ + + 指定ip地址及端口号来实例化一个松下的Qna兼容3E帧协议的通讯对象
+ Specify an IP address and port number to instantiate a Panasonic Qna compatible 3E frame protocol communication object +
+ PLC的Ip地址 + PLC的端口 +
+ + + + + + + + + + + + 松下PLC的数据交互协议,采用Mewtocol协议通讯,支持的地址列表参考api文档
+ The data exchange protocol of Panasonic PLC adopts Mewtocol protocol for communication. For the list of supported addresses, refer to the api document. +
+ + 地址支持携带站号的访问方式,例如:s=2;D100 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 松下PLC的数据交互协议,采用Mewtocol协议通讯,基于Tcp透传实现的机制,支持的地址列表参考api文档
+ The data exchange protocol of Panasonic PLC adopts Mewtocol protocol for communication. + It is based on the mechanism of Tcp transparent transmission. For the list of supported addresses, refer to the api document. +
+ + 地址支持携带站号的访问方式,例如:s=2;D100 + +
+ + + 实例化一个默认的松下PLC通信对象,默认站号为0xEE
+ Instantiate a default Panasonic PLC communication object, the default station number is 0xEE +
+ 站号信息,默认为0xEE +
+ + + 实例化一个默认的松下PLC通信对象,指定ip地址,端口,默认站号为0xEE
+ Instantiate a default Panasonic PLC communication object, specify the IP address, port, and the default station number is 0xEE +
+ Ip地址数据 + 端口号 + 站号信息,默认为0xEE +
+ + + + + + PLC设备的目标站号,需要根据实际的设置来填写
+ The target station number of the PLC device needs to be filled in according to the actual settings +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 松下Mewtocol协议的虚拟服务器,支持串口和网口的操作
+ Panasonic Mewtocol protocol virtual server, supports serial and network port operations +
+ + 地址的地址分为线圈型和整型,线圈支持X,Y,R,L, 字单位的整型支持 X,Y,R,L,D,LD,F
+ The address of the address is divided into coil type and integer type, the coil supports X, Y, R, L, and the integer type of word unit supports X, Y, R, L, D, LD, F +
+
+ + + 实例化一个默认的对象 + + + + + + + + + + + + + + + 在服务器端的功能实现里,暂时不支持C,T数据的访问。
+ In the server-side function implementation, access to C and T data is temporarily not supported. +
+
+ + + + 在服务器端的功能实现里,暂时不支持C,T数据的访问。
+ In the server-side function implementation, access to C and T data is temporarily not supported. +
+
+ + + + 在服务器端的功能实现里,长度支持任意的长度信息。
+ In the server-side function implementation, the length supports arbitrary length information. +
+
+ + + + + + + + + + + + 创建一个失败的返回消息,指定错误码即可,会自动计算出来BCC校验和 + + 错误码 + 原始字节报文,用于反馈消息 + + + + 根据命令来获取相关的数据内容 + + 原始的命令码 + 返回的数据信息 + + + + + + + + + + + + + Sick的扫码器的服务器信息,只要启动服务器之后,扫码器配置将条码发送到PC的指定端口上来即可,就可以持续的接收条码信息,同样也适用于海康,基恩士,DATELOGIC 。
+ The server information of Sick's code scanner, as long as the server is started, the code scanner is configured to send the barcode to the designated port of the PC, and it can continuously receive the barcode information. +
+
+ + + 实例化一个默认的服务器对象
+ Instantiate a default server object +
+
+ + + 接收条码数据的委托信息
+ Entrusted information to receive barcode data +
+ Ip地址信息 + 条码信息 +
+ + + 当接收到条码数据的时候触发
+ Triggered when barcode data is received +
+
+ + + + + + 新增一个主动连接的请求,将不会收到是否连接成功的信息,当网络中断及奔溃之后,会自动重新连接。
+ A new active connection request will not receive a message whether the connection is successful. When the network is interrupted and crashed, it will automatically reconnect. +
+ 对方的Ip地址 + 端口号 +
+ + + 获取当前在线的客户端数量
+ Get the number of clients currently online +
+
+ + + + + + + + + 西门子PPI的公用接口信息 + + + + + + + + + + + + + + 西门子PPI协议的辅助类对象 + + + + + 解析数据地址,解析出地址类型,起始地址,DB块的地址
+ Parse data address, parse out address type, start address, db block address +
+ 起始地址,例如M100,I0,Q0,V100 -> + Start address, such as M100,I0,Q0,V100 + 解析数据地址,解析出地址类型,起始地址,DB块的地址 -> + Parse data address, parse out address type, start address, db block address +
+ + + + + + 生成一个读取字数据指令头的通用方法
+ A general method for generating a command header to read a Word data +
+ 设备的站号信息 -> Station number information for the device + 起始地址,例如M100,I0,Q0,V100 -> + Start address, such as M100,I0,Q0,V100 + 读取数据长度 -> Read Data length + 是否为位读取 + 包含结果对象的报文 -> Message containing the result object +
+ + + 生成一个写入PLC数据信息的报文内容 + + PLC的站号 + 地址 + 数据值 + 是否写入成功 + + + + 根据错误代号信息,获取到指定的文本信息
+ According to the error code information, get the specified text information +
+ 错误状态信息 + 消息文本 +
+ + + 根据错误信息,获取到文本信息 + + 错误类型 + 错误代码 + 错误信息 + + + + 创建写入PLC的bool类型数据报文指令 + + PLC的站号信息 + 地址信息 + bool[]数据值 + 带有成功标识的结果对象 + + + + + + + 检查西门子PLC的返回的数据和合法性,对反馈的数据进行初步的校验 + + 服务器返回的原始的数据内容 + 是否校验成功 + + + + 根据站号信息获取命令二次确认的报文信息 + + 站号信息 + 二次命令确认的报文 + + + + 从西门子的PLC中读取数据信息,地址为"M100","AI100","I0","Q0","V100","S100"等
+ Read data information from Siemens PLC with addresses "M100", "AI100", "I0", "Q0", "V100", "S100", etc. +
+ PLC的通信对象 + 西门子的地址数据信息 + 数据长度 + 当前的站号信息 + 当前的同通信锁 + 带返回结果的结果对象 +
+ + + 从西门子的PLC中读取bool数据信息,地址为"M100.0","AI100.1","I0.3","Q0.6","V100.4","S100"等
+ Read bool data information from Siemens PLC, the addresses are "M100.0", "AI100.1", "I0.3", "Q0.6", "V100.4", "S100", etc. +
+ PLC的通信对象 + 西门子的地址数据信息 + 当前的站号信息 + 当前的同通信锁 + 带返回结果的结果对象 +
+ + + + + + 将字节数据写入到西门子PLC中,地址为"M100.0","AI100.1","I0.3","Q0.6","V100.4","S100"等
+ Write byte data to Siemens PLC with addresses "M100.0", "AI100.1", "I0.3", "Q0.6", "V100.4", "S100", etc. +
+ PLC的通信对象 + 西门子的地址数据信息 + 数据长度 + 当前的站号信息 + 当前的同通信锁 + 带返回结果的结果对象 +
+ + + 将bool数据写入到西门子PLC中,地址为"M100.0","AI100.1","I0.3","Q0.6","V100.4","S100"等
+ Write the bool data to Siemens PLC with the addresses "M100.0", "AI100.1", "I0.3", "Q0.6", "V100.4", "S100", etc. +
+ PLC的通信对象 + 西门子的地址数据信息 + 数据长度 + 当前的站号信息 + 当前的同通信锁 + 带返回结果的结果对象 +
+ + + 启动西门子PLC为RUN模式,参数信息可以携带站号信息 "s=2;", 注意,分号是必须的。
+ Start Siemens PLC in RUN mode, parameter information can carry station number information "s=2;", note that the semicolon is required. +
+ PLC的通信对象 + 额外的参数信息,例如可以携带站号信息 "s=2;", 注意,分号是必须的。 + 当前的站号信息 + 当前的同通信锁 + 是否启动成功 +
+ + + 停止西门子PLC,切换为Stop模式,参数信息可以携带站号信息 "s=2;", 注意,分号是必须的。
+ Stop Siemens PLC and switch to Stop mode, parameter information can carry station number information "s=2;", note that the semicolon is required. +
+ PLC的通信对象 + 额外的参数信息,例如可以携带站号信息 "s=2;", 注意,分号是必须的。 + 当前的站号信息 + 当前的同通信锁 + 是否停止成功 +
+ + + 读取西门子PLC的型号信息,参数信息可以携带站号信息 "s=2;", 注意,分号是必须的。
+ Read the model information of Siemens PLC, the parameter information can carry the station number information "s=2;", note that the semicolon is required. +
+ PLC的通信对象 + 额外的参数信息,例如可以携带站号信息 "s=2;", 注意,分号是必须的。 + 当前的站号信息 + 当前的同通信锁 + 包含是否成功的结果对象 +
+ + + 读取BOOL时,根据S7协议的返回报文,正确提取出实际的数据内容 + + PLC返回的原始字节信息 + 解析之后的结果对象 + + + + 读取字数据时,根据S7协议返回的报文,解析出实际的原始字节数组信息 + + PLC返回的原始字节数组 + 实际的结果数据对象 + + + + 读取西门子的地址的字符串信息,这个信息是和西门子绑定在一起,长度随西门子的信息动态变化的
+ Read the Siemens address string information. This information is bound to Siemens and its length changes dynamically with the Siemens information +
+ + 如果指定编码,一般即可,中文需要 Encoding.GetEncoding("gb2312") + + PLC的通信对象 + PLC的系列信息 + 数据地址,具体的格式需要参照类的说明文档 + 自定的编码信息,一般即可,中文需要 Encoding.GetEncoding("gb2312") + 带有是否成功的字符串结果类对象 +
+ + + 将指定的字符串写入到西门子PLC里面去,将自动添加字符串长度信息,方便PLC识别字符串的内容。
+ Write the specified string into Siemens PLC, and the string length information will be automatically added, which is convenient for PLC to identify the content of the string. +
+ PLC的通信对象 + PLC的系列信息 + 数据地址,具体的格式需要参照类的说明文档 + 写入的字符串值 + 编码信息 + 是否写入成功 +
+ + + 读取西门子的地址的字符串信息,这个信息是和西门子绑定在一起,长度随西门子的信息动态变化的
+ Read the Siemens address string information. This information is bound to Siemens and its length changes dynamically with the Siemens information +
+ PLC的通信对象 + PLC的系列信息 + 数据地址,具体的格式需要参照类的说明文档 + 带有是否成功的字符串结果类对象 +
+ + + 使用双字节编码的方式,将字符串以 Unicode 编码写入到PLC的地址里,可以使用中文。
+ Use the double-byte encoding method to write the character string to the address of the PLC in Unicode encoding. Chinese can be used. +
+ PLC的通信对象 + PLC的系列信息 + 起始地址,格式为I100,M100,Q100,DB20.100 -> Starting address, formatted as I100,mM100,Q100,DB20.100 + 字符串的值 + 是否写入成功的结果对象 +
+ + + + + + + + + + + + + + + Contains the methods to convert between and S7 representation of datetime values. + + + 这部分的代码参考了另一个s7的库,感谢原作者,此处贴出出处,遵循 MIT 协议 + + https://github.com/S7NetPlus/s7netplus + + + + + The minimum value supported by the specification. + + + + + The maximum value supported by the specification. + + + + + Parses a value from bytes. + + Input bytes read from PLC. + A object representing the value read from PLC. + Thrown when the length of + is not 8 or any value in + is outside the valid range of values. + + + + 从西门子的原始字节数据中,提取出DTL格式的时间信息 + + 西门子的字节变换对象 + 原始字节数据 + 字节偏移索引 + 时间信息 + + + + 将时间数据转换为西门子的DTL格式的时间数据 + + 西门子的字节变换对象 + 指定的时间信息 + 原始字节数据信息 + + + + Parses an array of values from bytes. + + Input bytes read from PLC. + An array of objects representing the values read from PLC. + Thrown when the length of + is not a multiple of 8 or any value in + is outside the valid range of values. + + + + Converts a value to a byte array. + + The DateTime value to convert. + A byte array containing the S7 date time representation of . + Thrown when the value of + is before + or after . + + + + Converts an array of values to a byte array. + + The DateTime values to convert. + A byte array containing the S7 date time representations of . + Thrown when any value of + is before + or after . + + + + 使用了Fetch/Write协议来和西门子进行通讯,该种方法需要在PLC侧进行一些配置
+ Using the Fetch/write protocol to communicate with Siemens, this method requires some configuration on the PLC side +
+ + 配置的参考文章地址:https://www.cnblogs.com/dathlin/p/8685855.html +
+ 与S7协议相比较而言,本协议不支持对单个的点位的读写操作。如果读取M100.0,需要读取M100的值,然后进行提取位数据。 + + 如果需要写入位地址的数据,可以读取plc的byte值,然后进行与或非,然后写入到plc之中。 +
+ + + + +
+ + + 实例化一个西门子的Fetch/Write协议的通讯对象
+ Instantiate a communication object for a Siemens Fetch/write protocol +
+
+ + + 实例化一个西门子的Fetch/Write协议的通讯对象
+ Instantiate a communication object for a Siemens Fetch/write protocol +
+ PLC的Ip地址 -> Specify IP Address + PLC的端口 -> Specify IP Port +
+ + + + + + 从PLC读取数据,地址格式为I100,Q100,DB20.100,M100,T100,C100,以字节为单位
+ Read data from PLC, address format I100,Q100,DB20.100,M100,T100,C100, in bytes +
+ 起始地址,格式为I100,M100,Q100,DB20.100,T100,C100 -> + Starting address, formatted as I100,M100,Q100,DB20.100,T100,C100 + + 读取的数量,以字节为单位 -> The number of reads, in bytes + 带有成功标志的字节信息 -> Byte information with a success flag + + 假设起始地址为M100,M100存储了温度,100.6℃值为1006,M102存储了压力,1.23Mpa值为123,M104,M105,M106,M107存储了产量计数,读取如下: + + 以下是读取不同类型数据的示例 + + +
+ + + 将数据写入到PLC数据,地址格式为I100,Q100,DB20.100,M100,以字节为单位
+ Writes data to the PLC data, in the address format i100,q100,db20.100,m100, in bytes +
+ 起始地址,格式为M100,I100,Q100,DB1.100 -> Starting address, formatted as M100,I100,Q100,DB1.100 + 要写入的实际数据 -> The actual data to write + 是否写入成功的结果对象 -> Whether to write a successful result object + + 假设起始地址为M100,M100,M101存储了温度,100.6℃值为1006,M102,M103存储了压力,1.23Mpa值为123,M104-M107存储了产量计数,写入如下: + + 以下是写入不同类型数据的示例 + + +
+ + + + + + + + + 读取指定地址的byte数据
+ Reads the byte data for the specified address +
+ 起始地址,格式为M100,I100,Q100,DB1.100 -> Starting address, formatted as M100,I100,Q100,DB1.100 + byte类型的结果对象 -> Result object of type Byte + + + 不适用于DB块,定时器,计数器的数据读取,会提示相应的错误,读取长度必须为偶数 + + +
+ + + 向PLC中写入byte数据,返回是否写入成功
+ Writes byte data to the PLC and returns whether the write succeeded +
+ 起始地址,格式为M100,I100,Q100,DB1.100 -> Starting address, formatted as M100,I100,Q100,DB1.100 + 要写入的实际数据 -> The actual data to write + 是否写入成功的结果对象 -> Whether to write a successful result object +
+ + + + + + + + + + + + 计算特殊的地址信息
+ Calculate special address information +
+ 字符串信息 + 实际值 +
+ + + 解析数据地址,解析出地址类型,起始地址,DB块的地址
+ Parse data address, parse out address type, start address, db block address +
+ 起始地址,格式为M100,I100,Q100,DB1.100 -> Starting address, formatted as M100,I100,Q100,DB1.100 + 解析出地址类型,起始地址,DB块的地址 -> Resolves address type, start address, db block address +
+ + + 生成一个读取字数据指令头的通用方法
+ A general method for generating a command header to read a Word data +
+ 起始地址,格式为M100,I100,Q100,DB1.100 -> Starting address, formatted as M100,I100,Q100,DB1.100 + 读取数据个数 -> Number of Read data + 带结果对象的报文数据 -> Message data with a result object +
+ + + 生成一个写入字节数据的指令
+ Generate an instruction to write byte data +
+ 起始地址,格式为M100,I100,Q100,DB1.100 -> Starting address, formatted as M100,I100,Q100,DB1.100 + 实际的写入的内容 -> The actual content of the write + 带结果对象的报文数据 -> Message data with a result object +
+ + + 西门子的Fetch/Write协议的虚拟PLC,可以用来调试通讯,也可以实现一个虚拟的PLC功能,从而开发一套带虚拟环境的上位机系统,可以用来演示,测试。
+ The virtual PLC of Siemens Fetch/Write protocol can be used for debugging communication, and can also realize a virtual PLC function, so as to develop a set of upper computer system with virtual environment, which can be used for demonstration and testing. +
+ + 本虚拟服务器的使用需要企业商业授权,否则只能运行24小时。本协议实现的虚拟PLC服务器,主要支持I,Q,M,DB块的数据读写操作,例如 M100, DB1.100,服务器端也可以对位进行读写操作,例如M100.1,DB1.100.2; + 但是不支持连接的远程客户端对位进行操作。 + + + 地址支持的列表如下: + + + 地址名称 + 地址代号 + 示例 + 地址进制 + 字操作 + 位操作 + 备注 + + + 中间寄存器 + M + M100,M200 + 10 + + + + + + 输入寄存器 + I + I100,I200 + 10 + + + + + + 输出寄存器 + Q + Q100,Q200 + 10 + + + + + + DB块寄存器 + DB + DB1.100,DB1.200 + 10 + + + + + + V寄存器 + V + V100,V200 + 10 + + + V寄存器本质就是DB块1 + + + 本虚拟的PLC共有4个DB块,DB1.X, DB2.X, DB3.X, 和其他DB块。对于远程客户端的读写长度,暂时没有限制。 + +
+ + + 实例化一个S7协议的服务器,支持I,Q,M,DB1.X, DB2.X, DB3.X 数据区块的读写操作
+ Instantiate a server with S7 protocol, support I, Q, M, DB1.X data block read and write operations +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 西门子的MPI协议信息,注意:未测试通过,无法使用
+ Siemens MPI protocol information, note: it has not passed the test and cannot be used +
+
+ + + 实例化一个西门子的MPI协议对象
+ Instantiate a Siemens MPI protocol object +
+
+ + + 西门子PLC的站号信息
+ Siemens PLC station number information +
+
+ + + 与PLC进行握手
+ Handshake with PLC +
+ 是否握手成功 +
+ + + 从西门子的PLC中读取数据信息,地址为"M100","AI100","I0","Q0","V100","S100"等,详细请参照API文档
+ Read data information from Siemens PLC, the address is "M100", "AI100", "I0", "Q0", "V100", "S100", etc., please refer to the API documentation +
+ 西门子的地址数据信息 + 数据长度 + 带返回结果的结果对象 +
+ + + 从西门子的PLC中读取bool数据信息,地址为"M100.0","AI100.1","I0.3","Q0.6","V100.4","S100"等,详细请参照API文档
+ Read the bool data information from Siemens PLC. The addresses are "M100.0", "AI100.1", "I0.3", "Q0.6", "V100.4", "S100", etc. For details, please Refer to API documentation +
+ 西门子的地址数据信息 + 数据长度 + 带返回结果的结果对象 +
+ + + 将字节数据写入到西门子PLC中,地址为"M100.0","AI100.1","I0.3","Q0.6","V100.4","S100"等,详细请参照API文档
+ Write byte data to Siemens PLC, the address is "M100.0", "AI100.1", "I0.3", "Q0.6", "V100.4", "S100", etc. Refer to API documentation +
+ 西门子的地址数据信息 + 数据长度 + 带返回结果的结果对象 +
+ + + 从西门子的PLC中读取byte数据信息,地址为"M100.0","AI100.1","I0.3","Q0.6","V100.4","S100"等,详细请参照API文档
+ Read byte data information from Siemens PLC. The addresses are "M100.0", "AI100.1", "I0.3", "Q0.6", "V100.4", "S100", etc. For details, please Refer to API documentation +
+ 西门子的地址数据信息 + 带返回结果的结果对象 +
+ + + 将byte数据写入到西门子PLC中,地址为"M100.0","AI100.1","I0.3","Q0.6","V100.4","S100"等,详细请参照API文档
+ Write byte data to Siemens PLC, the address is "M100.0", "AI100.1", "I0.3", "Q0.6", "V100.4", "S100", etc. API documentation +
+ 西门子的地址数据信息 + 数据长度 + 带返回结果的结果对象 +
+ + + + + + 生成一个读取字数据指令头的通用方法
+ A general method for generating a command header to read a Word data +
+ 设备的站号信息 -> Station number information for the device + 起始地址,例如M100,I0,Q0,V100 -> + Start address, such as M100,I0,Q0,V100 + 读取数据长度 -> Read Data length + 是否为位读取 + 包含结果对象的报文 -> Message containing the result object +
+ + + 生成一个写入PLC数据信息的报文内容
+ Generate a message content to write PLC data information +
+ PLC的站号 + 地址 + 数据值 + 是否写入成功 +
+ + + 根据错误信息,获取到文本信息 + + 状态 + 消息文本 + + + + 根据错误信息,获取到文本信息 + + 错误类型 + 错误代码 + 错误信息 + + + + 西门子的PLC类型,目前支持的访问类型 + + + + + 1200系列 + + + + + 300系列 + + + + + 400系列 + + + + + 1500系列PLC + + + + + 200的smart系列 + + + + + 200系统,需要额外配置以太网模块 + + + + + 西门子的PPI协议,适用于s7-200plc,注意,由于本类库的每次通讯分成2次操作,内部增加了一个同步锁,所以单次通信时间比较久,另外,地址支持携带站号,例如:s=2;M100
+ Siemens' PPI protocol is suitable for s7-200plc. Note that since each communication of this class library is divided into two operations, + and a synchronization lock is added inside, the single communication time is relatively long. In addition, + the address supports carrying the station number, for example : S=2;M100 +
+ + 适用于西门子200的通信,非常感谢 合肥-加劲 的测试,让本类库圆满完成。注意:M地址范围有限 0-31地址
+ 在本类的实现类里,如果使用了Async的异步方法,没有增加同步锁,多线程调用可能会引发数据错乱的情况。
+ In the implementation class of this class, if the asynchronous method of Async is used, + the synchronization lock is not added, and multi-threaded calls may cause data disorder. +
+
+ + + 实例化一个西门子的PPI协议对象
+ Instantiate a Siemens PPI protocol object +
+
+ + + + + + 西门子PLC的站号信息
+ Siemens PLC station number information +
+
+ + + + + + + + + + + + + + + + + + 从西门子的PLC中读取byte数据信息,地址为"M100","AI100","I0","Q0","V100","S100"等,详细请参照API文档
+ Read byte data information from Siemens PLC. The addresses are "M100", "AI100", "I0", "Q0", "V100", "S100", etc. Please refer to the API documentation for details. +
+ 西门子的地址数据信息 + 带返回结果的结果对象 +
+ + + 向西门子的PLC中写入byte数据,地址为"M100","AI100","I0","Q0","V100","S100"等,详细请参照API文档
+ Write byte data from Siemens PLC with addresses "M100", "AI100", "I0", "Q0", "V100", "S100", etc. For details, please refer to the API documentation +
+ 西门子的地址数据信息 + 数据长度 + 带返回结果的结果对象 +
+ + + + + + + + + + + + + + + + + + + + + + + + 使用指定的ip地址和端口号来实例化对象
+ Instantiate the object with the specified IP address and port number +
+ Ip地址信息 + 端口号信息 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PPIServer的虚拟服务器对象,支持的地址类型和S7虚拟服务器一致 + + + + + 实例化一个默认的对象 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 一个西门子的客户端类,使用S7协议来进行数据交互,对于s300,s400需要关注的设置值, + 对于s200,需要关注的设置值,详细参考demo的设置。
+ A Siemens client class uses the S7 protocol for data exchange. For s300 and s400, + you need to pay attention to the setting values of and . For s200, + you need to pay attention to and . See cref="LocalTSAP"/> and settings, + please refer to the demo settings for details. +
+ + 暂时不支持bool[]的批量写入操作,请使用 Write(string, byte[]) 替换。
+ 对于200smartPLC的V区,就是DB1.X,例如,V100=DB1.100,当然了你也可以输入V100
+ 如果读取PLC的字符串string数据,可以使用 +
+ + 对于200smartPLC的V区,就是DB1.X,例如,V100=DB1.100 + + + + 假设起始地址为M100,M100存储了温度,100.6℃值为1006,M102存储了压力,1.23Mpa值为123,M104,M105,M106,M107存储了产量计数,读取如下: + + 以下是读取不同类型数据的示例 + + + 以下是一个复杂的读取示例 + + 在西门子PLC,字符串分为普通的string,和WString类型,前者为单字节的类型,后者为双字节的字符串类型
+ 一个字符串除了本身的数据信息,还有字符串的长度信息,比如字符串 "12345",比如在PLC的地址 DB1.0 存储的字节是 FE 05 31 32 33 34 35, 第一个字节是最大长度,第二个字节是当前长度,后面的才是字符串的数据信息。
+ +
+
+ + + 实例化一个西门子的S7协议的通讯对象
+ Instantiate a communication object for a Siemens S7 protocol +
+ 指定西门子的型号 +
+ + + 实例化一个西门子的S7协议的通讯对象并指定Ip地址
+ Instantiate a communication object for a Siemens S7 protocol and specify an IP address +
+ 指定西门子的型号 + Ip地址 +
+ + + + + + 初始化方法
+ Initialize method +
+ 指定西门子的型号 -> Designation of Siemens + Ip地址 -> IpAddress +
+ + + PLC的槽号,针对S7-400的PLC设置的
+ The slot number of PLC is set for PLC of s7-400 +
+
+ + + PLC的机架号,针对S7-400的PLC设置的
+ The frame number of the PLC is set for the PLC of s7-400 +
+
+ + + 获取或设置当前PLC的连接方式,PG: 0x01,OP: 0x02,S7Basic: 0x03...0x10
+ Get or set the current PLC connection mode, PG: 0x01, OP: 0x02, S7Basic: 0x03...0x10 +
+
+ + + 西门子相关的本地TSAP参数信息
+ A parameter information related to Siemens +
+
+ + + 西门子相关的远程TSAP参数信息
+ A parameter information related to Siemens +
+
+ + + 获取当前西门子的PDU的长度信息,不同型号PLC的值会不一样。
+ Get the length information of the current Siemens PDU, the value of different types of PLC will be different. +
+
+ + + + + + + + + + + + + + + 从PLC读取订货号信息
+ Reading order number information from PLC +
+ CPU的订货号信息 -> Order number information for the CPU +
+ + + + + + 对PLC进行热启动,目前仅适用于200smart型号
+ Hot start for PLC, currently only applicable to 200smart model +
+ 是否启动成功的结果对象 +
+ + + 对PLC进行冷启动,目前仅适用于200smart型号
+ Cold start for PLC, currently only applicable to 200smart model +
+ 是否启动成功的结果对象 +
+ + + 对PLC进行停止,目前仅适用于200smart型号
+ Stop the PLC, currently only applicable to the 200smart model +
+ 是否启动成功的结果对象 +
+ + + + + + + + + + + + 从PLC读取原始的字节数据,地址格式为I100,Q100,DB20.100,M100,长度参数以字节为单位
+ Read the original byte data from the PLC, the address format is I100, Q100, DB20.100, M100, length parameters in bytes +
+ 起始地址,格式为I100,M100,Q100,DB20.100
+ Starting address, formatted as I100,M100,Q100,DB20.100 + 读取的数量,以字节为单位
+ The number of reads, in bytes + + 是否读取成功的结果对象
+ Whether to read the successful result object
+ + + + + 假设起始地址为M100,M100存储了温度,100.6℃值为1006,M102存储了压力,1.23Mpa值为123,M104,M105,M106,M107存储了产量计数,读取如下: + + 以下是读取不同类型数据的示例 + + +
+ + + 从PLC读取数据,地址格式为I100,Q100,DB20.100,M100,以位为单位 -> + Read the data from the PLC, the address format is I100,Q100,DB20.100,M100, in bits units + + 起始地址,格式为I100,M100,Q100,DB20.100 -> + Starting address, formatted as I100,M100,Q100,DB20.100 + 是否读取成功的结果对象 -> Whether to read the successful result object + + + + 一次性从PLC获取所有的数据,按照先后顺序返回一个统一的Buffer,需要按照顺序处理,两个数组长度必须一致,数组长度无限制
+ One-time from the PLC to obtain all the data, in order to return a unified buffer, need to be processed sequentially, two array length must be consistent +
+ 起始地址,格式为I100,M100,Q100,DB20.100
+ Starting address, formatted as I100,M100,Q100,DB20.100 + 数据长度数组
+ Array of data Lengths + 是否读取成功的结果对象 -> Whether to read the successful result object + + + 原先的批量的长度为19,现在已经内部自动处理整合,目前的长度为任意和长度。 + + + 以下是一个高级的读取示例 + + +
+ + + 读取西门子的地址数据信息,支持任意个数的数据读取
+ Read Siemens address data information, support any number of data reading +
+ + 西门子的数据地址
+ Siemens data address + 返回的结果对象信息 -> Whether to read the successful result object +
+ + + 单次的读取,只能读取最多19个数组的长度,所以不再对外公开该方法 + + 西门子的地址对象 + 返回的结果对象信息 + + + + 基础的写入数据的操作支持
+ Operational support for the underlying write data +
+ 完整的字节数据 -> Full byte data + 是否写入成功的结果对象 -> Whether to write a successful result object +
+ + + 将数据写入到PLC数据,地址格式为I100,Q100,DB20.100,M100,以字节为单位
+ Writes data to the PLC data, in the address format I100,Q100,DB20.100,M100, in bytes +
+ 起始地址,格式为I100,M100,Q100,DB20.100 -> + Starting address, formatted as I100,M100,Q100,DB20.100 + 写入的原始数据 -> Raw data written to + 是否写入成功的结果对象 -> Whether to write a successful result object + + 假设起始地址为M100,M100,M101存储了温度,100.6℃值为1006,M102,M103存储了压力,1.23Mpa值为123,M104-M107存储了产量计数,写入如下: + + 以下是写入不同类型数据的示例 + + +
+ + + + + + + + + + + + + + + + + + + + + + + + 读取指定地址的bool数据,地址格式为I100,M100,Q100,DB20.100
+ reads bool data for the specified address in the format I100,M100,Q100,DB20.100 +
+ 起始地址,格式为I100,M100,Q100,DB20.100 -> + Starting address, formatted as I100,M100,Q100,DB20.100 + 是否读取成功的结果对象 -> Whether to read the successful result object + + + 对于200smartPLC的V区,就是DB1.X,例如,V100=DB1.100 + + + + 假设读取M100.0的位是否通断 + + +
+ + + 读取指定地址的bool数组,地址格式为I100,M100,Q100,DB20.100
+ reads bool array data for the specified address in the format I100,M100,Q100,DB20.100 +
+ 起始地址,格式为I100,M100,Q100,DB20.100 -> + Starting address, formatted as I100,M100,Q100,DB20.100 + 读取的长度信息 + 是否读取成功的结果对象 -> Whether to read the successful result object + + + 对于200smartPLC的V区,就是DB1.X,例如,V100=DB1.100 + + +
+ + + 写入PLC的一个位,例如"M100.6","I100.7","Q100.0","DB20.100.0",如果只写了"M100"默认为"M100.0"
+ Write a bit of PLC, for example "M100.6", "I100.7", "Q100.0", "DB20.100.0", if only write "M100" defaults to "M100.0" +
+ 起始地址,格式为"M100.6", "I100.7", "Q100.0", "DB20.100.0" -> + Start address, format "M100.6", "I100.7", "Q100.0", "DB20.100.0" + 写入的数据,True或是False -> Writes the data, either True or False + 是否写入成功的结果对象 -> Whether to write a successful result object + + 假设写入M100.0的位是否通断 + + +
+ + + [警告] 向PLC中写入bool数组,比如你写入M100,那么data[0]对应M100.0,写入的长度应该小于1600位
+ [Warn] Write the bool array to the PLC, for example, if you write M100, then data[0] corresponds to M100.0, + The length of the write should be less than 1600 bits +
+ 起始地址,格式为I100,M100,Q100,DB20.100 -> Starting address, formatted as I100,mM100,Q100,DB20.100 + 要写入的bool数组,长度为8的倍数 -> The bool array to write, a multiple of 8 in length + 是否写入成功的结果对象 -> Whether to write a successful result object + + + 批量写入bool数组存在一定的风险,举例写入M100.5的值 [true,false,true,true,false,true],会读取M100-M101的byte[],然后修改中间的位,再写入回去, + 如果读取之后写入之前,PLC修改了其他位,则会影响其他的位的数据,请谨慎使用。
+ There is a certain risk in batch writing bool arrays. For example, writing the value of M100.5 [true,false,true,true,false,true], + will read the byte[] of M100-M101, then modify the middle bit, and then Write back. + If the PLC modifies other bits after reading and before writing, it will affect the data of other bits. Please use it with caution. +
+
+
+ + + + + + + + + + + + + + + 读取指定地址的byte数据,地址格式I100,M100,Q100,DB20.100
+ Reads the byte data of the specified address, the address format I100,Q100,DB20.100,M100 +
+ 起始地址,格式为I100,M100,Q100,DB20.100 -> + Starting address, formatted as I100,M100,Q100,DB20.100 + 是否读取成功的结果对象 -> Whether to read the successful result object + 参考的注释 +
+ + + 向PLC中写入byte数据,返回值说明
+ Write byte data to the PLC, return value description +
+ 起始地址,格式为I100,M100,Q100,DB20.100 -> Starting address, formatted as I100,mM100,Q100,DB20.100 + byte数据 -> Byte data + 是否写入成功的结果对象 -> Whether to write a successful result object +
+ + + + + + + + + + + + + + + + + + + + + + + + 读取西门子的地址的字符串信息,这个信息是和西门子绑定在一起,长度随西门子的信息动态变化的
+ Read the Siemens address string information. This information is bound to Siemens and its length changes dynamically with the Siemens information +
+ 数据地址,具体的格式需要参照类的说明文档 + 带有是否成功的字符串结果类对象 +
+ + + + + + + + + + + + + + + + + + + + + 从PLC中读取时间格式的数据
+ Read time format data from PLC +
+ 地址 + 时间对象 +
+ + + 从PLC中读取DTL时间格式的数据 + + 地址信息 + 时间对象 + + + + 从PLC中读取日期格式的数据
+ Read data in date format from PLC +
+ PLC的地址 + 日期对象 +
+ + + 向PLC中写入时间格式的数据
+ Writes data in time format to the PLC +
+ 地址 + 时间 + 是否写入成功 +
+ + + 向PLC中写入DTL格式的时间数据信息 + + 写入的地址信息 + 时间 + 是否写入成功 + + + + 向PLC中写入日期格式的数据,日期格式里只有年,月,日
+ Write data in date format to PLC, only year, month, day in date format +
+ 等待写入的PLC地址 + 等待写入的日期 + 是否写入成功 +
+ + + + + + + + + + + + + + + + + + + + + + + + A general method for generating a command header to read a Word data + + siemens address + Message containing the result object + + + + 生成一个位读取数据指令头的通用方法 -> + A general method for generating a bit-read-Data instruction header + + 起始地址,例如M100.0,I0.1,Q0.1,DB2.100.2 -> + Start address, such as M100.0,I0.1,Q0.1,DB2.100.2 + + 包含结果对象的报文 -> Message containing the result object + + + + 生成一个写入字节数据的指令 -> Generate an instruction to write byte data + + 起始地址,示例M100,I100,Q100,DB1.100 -> Start Address, example M100,I100,Q100,DB1.100 + 原始的字节数据 -> Raw byte data + 包含结果对象的报文 -> Message containing the result object + + + + 生成一个写入位数据的指令 -> Generate an instruction to write bit data + + 起始地址,示例M100,I100,Q100,DB1.100 -> Start Address, example M100,I100,Q100,DB1.100 + 是否通断 -> Power on or off + 包含结果对象的报文 -> Message containing the result object + + + + 测试的基于S7 PLUS的协议,功能还未完成,无法调用 + + + + + 实例化一个西门子的S7协议的通讯对象
+ Instantiate a communication object for a Siemens S7 protocol +
+
+ + + 实例化一个西门子的S7协议的通讯对象并指定Ip地址
+ Instantiate a communication object for a Siemens S7 protocol and specify an IP address +
+ Ip地址 + 端口号信息 +
+ + + + + + 西门子相关的本地TSAP参数信息
+ A parameter information related to Siemens +
+
+ + + 西门子相关的远程TSAP参数信息
+ A parameter information related to Siemens +
+
+ + + 最近一次的PDU类型 + + + + + 获取当前西门子的PDU的长度信息,不同型号PLC的值会不一样。
+ Get the length information of the current Siemens PDU, the value of different types of PLC will be different. +
+
+ + + + + + + + + + + + 构建S7完整的通信报文 + + 报文信息 + 报文 + + + + S7-Plus协议专用的数据流 + + + + + 使用指定的对象,是否所属权来实例化一个对象 + + 套接字对象 + 是否所属权 + + + + + + + + + + 西门子S7协议的虚拟服务器,支持TCP协议,模拟的是1200的PLC进行通信,在客户端进行操作操作的时候,最好是选择1200的客户端对象进行通信。
+ The virtual server of Siemens S7 protocol supports TCP protocol. It simulates 1200 PLC for communication. When the client is operating, it is best to select the 1200 client object for communication. +
+ + 本西门子的虚拟PLC仅限商业授权用户使用,感谢支持。 + 对于200smartPLC的V区,就是DB1.X,例如,V100=DB1.100 + + + 地址支持的列表如下: + + + 地址名称 + 地址代号 + 示例 + 地址进制 + 字操作 + 位操作 + 备注 + + + 中间寄存器 + M + M100,M200 + 10 + + + + + + 输入寄存器 + I + I100,I200 + 10 + + + + + + 输出寄存器 + Q + Q100,Q200 + 10 + + + + + + DB块寄存器 + DB + DB1.100,DB1.200 + 10 + + + + + + V寄存器 + V + V100,V200 + 10 + + + V寄存器本质就是DB块1 + + + 定时器的值 + T + T100,T200 + 10 + + + 未测试通过 + + + 计数器的值 + C + C100,C200 + 10 + + + 未测试通过 + + + 你可以很快速并且简单的创建一个虚拟的s7服务器 + + 当然如果需要高级的服务器,指定日志,限制客户端的IP地址,获取客户端发送的信息,在服务器初始化的时候就要参照下面的代码: + + 服务器创建好之后,我们就可以对服务器进行一些读写的操作了,下面的代码是基础的BCL类型的读写操作。 + + 高级的对于byte数组类型的数据进行批量化的读写操作如下: + + 更高级操作请参见源代码。 + +
+ + + 实例化一个S7协议的服务器,支持I,Q,M,DB1.X, DB2.X, DB3.X 数据区块的读写操作
+ Instantiate a server with S7 protocol, support I, Q, M, DB1.X data block read and write operations +
+
+ + + 根据S7格式的地址,获取当前的数据缓存类对象 + + S7格式的数据地址信息 + 内存缓存对象 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 读取西门子的地址的字符串信息,这个信息是和西门子绑定在一起,长度随西门子的信息动态变化的
+ Read the Siemens address string information. This information is bound to Siemens and its length changes dynamically with the Siemens information +
+ 数据地址,具体的格式需要参照类的说明文档 + 带有是否成功的字符串结果类对象 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + 获取是否需要进行握手报文信息 + + 是否需要进行握手操作 + + + + + + + 将读取的结果数据内容进行打包,返回客户端读取 + + 接收的命令信息 + 读取的原始字节信息 + 返回客户端的原始报文信息 + + + + 创建返回的报文信息 + + 接收到的报文命令 + 返回的状态信息 + 返回的原始字节数组 + + + + 新增一个独立的DB块数据区,如果这个DB块已经存在,则新增无效。
+ Add a separate DB block data area, if the DB block already exists, the new one is invalid. +
+ DB块ID信息 +
+ + + 移除指定的DB块数据区,如果这个DB块不存在的话,操作无效,本方法无法移除1,2,3的DB块
+ Remove the specified DB block data area, if the DB block does not exist, the operation is invalid, and this method cannot remove the DB block of 1, 2, 3 +
+ 指定的ID信息 +
+ + + + + + + + + + + + + + + 西门子的基于WebApi协议读写数据对象,支持对PLC的标签进行读取,适用于1500系列,该数据标签需要共享开放出来。
+ Siemens reads and writes data objects based on the WebApi protocol, supports reading PLC tags, + and is suitable for the 1500 series. The data tags need to be shared and opened. +
+
+ + + 实例化一个默认的西门子WebApi通信对象
+ Instantiate a default Siemens WebApi communication object +
+
+ + + 使用指定的ip地址及端口号来实例化一个对象,端口号默认使用443,如果是http访问,使用80端口号
+ Use the specified ip address and port number to instantiate an object, the port number is 443 by default, if it is http access, port 80 is used +
+ ip地址信息 + 端口号信息 +
+ + + + + + 根据设置好的用户名和密码信息,登录远程的PLC,返回是否登录成功!在读写之前,必须成功调用当前的方法,获取到token,否则无法进行通信。
+ According to the set user name and password information, log in to the remote PLC, and return whether the login is successful! + Before reading and writing, the current method must be successfully called to obtain the token, + otherwise communication cannot be carried out. +
+ 是否连接成功 +
+ + + 和PLC断开当前的连接信息,主要是使得Token信息失效。
+ Disconnecting the current connection information from the PLC mainly makes the token information invalid. +
+ 是否断开成功 +
+ + + + + + + + + 当前PLC的通信令牌,当调用时,会自动获取,当然你也可以手动赋值一个合法的令牌,跳过直接进行读写操作。
+ The communication token of the current PLC will be automatically obtained when is called. Of course, + you can also manually assign a valid token, skip and read it directly Write operation. +
+
+ + + 从PLC中根据输入的数据标签名称,读取出原始的字节数组信息,长度参数无效,需要二次解析
+ According to the input data tag name, read the original byte array information from the PLC, + the length parameter is invalid, and a second analysis is required +
+ 标签的地址信息,例如 "全局DB".Static_21 + 无效的参数 + 原始的字节数组信息 +
+ + + 从PLC中根据输入的数据标签名称,按照类型byte进行读取出数据信息
+ According to the input data tag name from the PLC, read the data information according to the type byte +
+ 标签的地址信息,例如 "全局DB".Static_21 + 包含是否成功的结果对象 +
+ + + + + + 将原始的字节数组信息写入到PLC的指定的数据标签里,写入方式为raw写入,是否写入成功取决于PLC的返回信息
+ Write the original byte array information to the designated data tag of the PLC. + The writing method is raw writing. Whether the writing is successful depends on the return information of the PLC. +
+ 标签的地址信息,例如 "全局DB".Static_21 + 原始的字节数据信息 + 是否成功写入PLC的结果对象 +
+ + + 写入数组数据,返回是否成功
+ Write array data, return whether the write was successful +
+ 标签的地址信息,例如 "全局DB".Static_21 + 写入值 + 是否写入成功 +
+ + + 批量写入数组数据,返回是否成功
+ Batch write array data, return whether the write was successful +
+ 标签的地址信息,例如 "全局DB".Static_21 + 写入值 + 是否写入成功 +
+ + + 从PLC中读取字符串内容,需要指定数据标签名称,使用JSON方式读取,所以无论字符串是中英文都是支持读取的。
+ To read the string content from the PLC, you need to specify the data tag name and use JSON to read it, + so no matter whether the string is in Chinese or English, it supports reading. +
+ 标签的地址信息,例如 "全局DB".Static_21 + 无效参数 + 包含是否成功的结果对象 +
+ + + 将字符串信息写入到PLC中,需要指定数据标签名称,如果PLC指定了类型为WString,才支持写入中文,否则会出现乱码。
+ To write string information into the PLC, you need to specify the data tag name. + If the PLC specifies the type as WString, it supports writing in Chinese, otherwise garbled characters will appear. +
+ 标签的地址信息,例如 "全局DB".Static_21 + 字符串数据信息 + 是否成功写入 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + 读取当前PLC的操作模式,如果读取成功,结果将会是如下值之一:STOP, STARTUP, RUN, HOLD, -
+ Read the current operating mode of the PLC. If the reading is successful, + the result will be one of the following values: STOP, STARTUP, RUN, HOLD,- +
+ 结果对象 +
+ + + + + + [商业授权] 从PLC读取多个地址的数据信息,每个地址的数据类型可以不一致,需要自动从中提取出正确的数据
+ [Authorization] Read the data information of multiple addresses from the PLC, the data type of each address can be inconsistent, + you need to automatically extract the correct data from +
+ + 一旦中间有一个地址失败了,本方法就会返回失败,所以在调用本方法时,需要确保所有的地址正确。 + + "全局DB".Static_21 + 返回是否读取成功的结果对象 +
+ + + + + + + + + + + + + + + + + + [商业授权] 读取PLC的RPC接口的版本号信息
+ [Authorization] Read the version number information of the PLC's RPC interface +
+ 包含是否成功的结果对象 +
+ + + + + + [商业授权] 对PLC对象进行PING操作
+ [Authorization] PING the PLC object +
+ 是否PING成功 +
+ + + + + + 从PLC退出登录,当前的token信息失效,需要再次调用获取新的token信息才可以。
+ Log out from the PLC, the current token information is invalid, you need to call again to get the new token information. +
+ 是否成功 +
+ + + + + + 托利多电子秤的串口服务器对象 + + + + + 实例化一个默认的对象 + + + + + 初始化串口信息,9600波特率,8位数据位,1位停止位,无奇偶校验
+ Initial serial port information, 9600 baud rate, 8 data bits, 1 stop bit, no parity +
+ 端口号信息,例如"COM3" +
+ + + 初始化串口信息,波特率,8位数据位,1位停止位,无奇偶校验
+ Initializes serial port information, baud rate, 8-bit data bit, 1-bit stop bit, no parity +
+ 端口号信息,例如"COM3" + 波特率 +
+ + + 初始化串口信息,波特率,数据位,停止位,奇偶校验需要全部自己来指定
+ Start serial port information, baud rate, data bit, stop bit, parity all need to be specified +
+ 端口号信息,例如"COM3" + 波特率 + 数据位 + 停止位 + 奇偶校验 +
+ + + 根据自定义初始化方法进行初始化串口信息
+ Initialize the serial port information according to the custom initialization method +
+ 初始化的委托方法 +
+ + + 打开一个新的串行端口连接
+ Open a new serial port connection +
+
+ + + 获取一个值,指示串口是否处于打开状态
+ Gets a value indicating whether the serial port is open +
+ 是或否 +
+ + + 关闭当前的串口连接
+ Close the current serial connection +
+
+ + + + + + 获取或设置一个值,该值指示在串行通信中是否启用请求发送 (RTS) 信号。
+ Gets or sets a value indicating whether the request sending (RTS) signal is enabled in serial communication. +
+
+ + + 当前连接串口信息的端口号名称
+ The port name of the current connection serial port information +
+
+ + + 当前连接串口信息的波特率
+ Baud rate of current connection serial port information +
+
+ + + 接收数据的超时时间,默认5000ms
+ Timeout for receiving data, default is 5000ms +
+
+ + + 获取或设置当前的报文否是含有校验的,默认为含有校验 + + + + + 托利多数据接收时的委托 + + 数据发送对象 + 数据对象 + + + + 当接收到一条新的托利多的数据的时候触发 + + + + + + + + 托利多标准格式的数据类对象 + + + + + 实例化一个默认的对象 + + + + + 从缓存里加载一个标准格式的对象 + + 缓存 + + + + 为 True 则是净重,为 False 则为毛重 + + + + + 为 True 则是正,为 False 则为负 + + + + + 是否在范围之外 + + + + + 是否为动态,为 True 则是动态,为 False 则为稳态 + + + + + 单位 + + + + + 是否打印 + + + + + 是否10被扩展 + + + + + 重量 + + + + + 皮重 + + + + + 皮重类型,0: 无皮重; 1: 按键去皮; 2: 预置去皮; 3: 皮重内存,仅在扩展输出下有效 + + + + + 数据是否有效 + + + + + 是否属于扩展输出模式 + + + + + 解析数据的原始字节 + + + + + + + + 从连续标准的模式里解析出真实的数据信息 + + 接收到的数据缓存 + 托利多的数据对象 + + + + 托利多电子秤的TCP服务器,启动服务器后,等待电子秤的数据连接。 + + + + + 实例化一个默认的对象 + + + + + 获取或设置当前的报文否是含有校验的,默认为含有校验 + + + + + + + + 托利多数据接收时的委托 + + 数据发送对象 + 数据对象 + + + + 当接收到一条新的托利多的数据的时候触发 + + + + + + + + 丰田工机的计算机链接协议实现,通过2PORT-EFR模块实现对PLC的读写数据操作,需要在PLC配置相关的以太网端口信息,才能进行通信。具体的地址参考DEMO程序信息。
+ Toyota Gongki's computer link protocol realizes the reading and writing data operation of the PLC through the 2PORT-EFR module, + and the relevant Ethernet port information needs to be configured in the PLC in order to communicate. For specific addresses, refer to Demo UI. +
+ + 感谢QQ:435416143 对本类的测试,时间:2023年5月2日
+ 位地址支持 K,V,T,C,L,X,Y,M,EK,EV,EC,ET,EL,EX,EY,EM,GX,GY,GM 地址,也可以指定prg参数,例如 prg=1;K000
+ 当然也可以使用字地址访问上述的位地址的,例如 M100~M10F 的位地址,就等于 M10 读字,也就是short。字地址额外支持:S,N,R,D,B,ES,EN,H,U,EB +
+
+ + + 实例化一个默认的对象 + + + + + 指定IP地址,端口号信息来实例化一个对象 + + IP地址 + 端口号 + + + + + + + + + + + + + + 地址类型地址 K,V,T,C,L,X,Y,M,EK,EV,EC,ET,EL,EX,EY,EM 地址,也可以指定程序号(prg)参数,例如 prg=1;K000 + + + + + + 地址类型地址 K,V,T,C,L,X,Y,M,EK,EV,EC,ET,EL,EX,EY,EM 地址,也可以指定程序号(prg)参数,例如 prg=1;K000 + + + + + + 地址类型地址 K,V,T,C,L,X,Y,M,EK,EV,EC,ET,EL,EX,EY,EM,S,N,R,D,B,ES,EN,H,U,EB地址,也可以指定程序号(prg)参数,例如 prg=1;K000 + + + + + + 地址类型地址 K,V,T,C,L,X,Y,M,EK,EV,EC,ET,EL,EX,EY,EM,S,N,R,D,B,ES,EN,H,U,EB地址,也可以指定程序号(prg)参数,例如 prg=1;K000 + + + + + + + + + + + + + + + + + + + + 丰田工机的PLC对象信息 + + + + + 实例化一个丰田工机PLC的网口和串口服务器,支持数据读写操作 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Reader协议的实现 + + + + + 实例化默认的构造方法
+ Instantiate the default constructor +
+
+ + + 使用指定的ip地址和端口来实例化一个对象
+ Instantiate an object with the specified IP address and port +
+ 设备的Ip地址 + 设备的端口号 +
+ + + + + + + + + + + + + + + + + + 获取设备的唯一的UID信息,本值会在连接上PLC之后自动赋值 + + + + + 获取当前设备的数据块总数量,本值会在连接上PLC之后自动赋值 + + + + + 获取当前设备的每个数据块拥有的字节数,本值会在连接上PLC之后自动赋值 + + + + + 读取指定地址的byte数据 + + 起始地址 + 是否读取成功的结果对象 -> Whether to read the successful result object + 参考的注释 + + + + 向设备中写入byte数据,返回值说明
+
+ 起始地址 + byte数据 -> Byte data + 是否写入成功的结果对象 -> Whether to write a successful result object +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 读取载码体信息,并将读取的信息进行初始化 + + 返回UID信息 + + + + + + + + + + 将字符串的地址解析出实际的整数地址,如果是位地址,支持使用小数点的形式 例如100.1 + + 地址信息 + 是否位地址 + 整数地址信息 + + + + 检查当前的设备的返回的数据是否是ACK消息 + + 设备的数据信息 + 是否是ACK内容 + + + + 计算缓存数据里的CRC校验信息,并返回CRC计算的结果 + + 数据信息 + 计算的长度信息 + CRC计算结果 + + + + 计算并填充CRC校验到原始数据中去 + + 原始的数据信息 + 计算的长度信息 + + + + 校验当前数据的CRC校验是否正确 + + 原始数据信息 + 长度数据信息 + 校验结果 + + + + 将普通的命令打造成图尔克的reader协议完整命令 + + 命令信息 + 完整的命令包 + + + + 构建读取的数据块的命令信息,一次最多读取64个字节 + + 需要读取的起始 Block。从 0 开始。 + 需要读取的 Block 数量。 从 0 开始。 + 每个数据块占用的字节数 + 完整的命令报文信息 + + + + 构建写入数据块的命令信息,一次最多写入64个字节 + + 需要读取的起始 Block。从 0 开始。 + 需要读取的 Block 数量。 从 0 开始。 + 每个数据块占用的字节数 + 写入的数据 + 完整的写入的命令报文信息 + + + + 图尔克reader协议的虚拟服务器 + + + + + 实例化一个默认的图尔克虚拟服务器 + + + + + 获取或设置每个block占用的字节数信息 + + + + + + + + + + + + + + 丰炜PLC的辅助方法 + + + + + + 支持字地址,单次最多读取64字节,支持D,SD,R,T,C的数据读取,同时地址支持携带站号信息,s=2;D100 + + + + + + 需要输入位地址,最多读取1024位,支持X,Y,M,SM,S,TS(定时器触点),TC(定时器线圈),CS(计数器触点),CC(计数器线圈) + + + + + + 支持字地址,单次最多读取64字节,支持D,SD,R,T,C的数据写入,其中C199~C200不能连续写入,前者是16位计数器,后者是32位计数器 + + + + + + 支持位地址的写入,支持X,Y,M,SM,S,TS(定时器触点),TC(定时器线圈),CS(计数器触点),CC(计数器线圈) + + + + + + + + + + + + + + + + + 丰炜PLC的辅助类对象 + + + + + 构建读取的报文命令,对于字地址,单次最多读取64字节,支持D,SD,R,T,C的数据读取,对于位地址,最多读取1024位,支持X,Y,M,SM,S,TS(定时器触点),TC(定时器线圈),CS(计数器触点),CC(计数器线圈)
+ Construct a read message command. For word addresses, up to 64 bytes can be read at a time, and data reading of D, SD, R, T, and C is supported. For bit addresses, + up to 1024 bits are read, and X, Y are supported. , M, SM, S, TS (timer contact), TC (timer coil), CS (counter contact), CC (counter coil) +
+ 站号信息 + PLC的数据地址 + 读取的长度 + 是否进行位读取 + 完整的读取的报文信息 +
+ + + 构建以字单位写入的报文,单次最多写入64个word,地址支持 D,SD,R,T,C,对于C200~C255,是属于32位的计数器
+ Construct a message written in word units, and write up to 64 words in a single time. The address supports D, SD, R, T, C. For C200~C255, it is a 32-bit counter +
+ 站号信息 + PLC的地址 + 写入的原始数据 + 写入命令的完整报文 +
+ + + 构建以位单位写入的报文,单次最多写入1024bit,支持X,Y,M,SM,S,TS(定时器触点),TC(定时器线圈),CS(计数器触点),CC(计数器线圈) + + 站号信息 + PLC的地址 + 等待写入的bool数组 + 写入位数据的完整报文信息 + + + + 检查从PLC返回的报文是否正确,以及提取出正确的结果数据 + + PLC返回的报文 + 提取的结果数据内容 + + + + 丰炜通信协议的串口通信,支持VS系列,地址支持携带站号,例如 s=2;D100, 字地址支持 D,SD,R,T,C(C200-C255是32位寄存器), 位地址支持X,Y,M,SM,S,TS(定时器触点),TC(定时器线圈),CS(计数器触点),CC(计数器线圈)
+ The network port transparent transmission version of Fengwei communication protocol supports VS series, and the address supports carrying station number, + such as s=2;D100, word address supports D, SD, R, T, C (C200-C255 are 32-bit registers), Bit address supports X, Y, M, SM, S, TS (timer contact), + TC (timer coil), CS (counter contact), CC (counter coil) +
+ + 串口默认的参数为 19200波特率,8 - N - 1方式,暂时不支持对字寄存器(D,R)进行读写位操作,感谢随时关注库的更新日志 + +
+ + + 实例化一个默认的对象 + + + + + + + + + + + 获取或设置当前PLC的站号信息 + + + + + + + + + + + + + + + + + + + + 丰炜通信协议的网口透传版本,支持VS系列,地址支持携带站号,例如 s=2;D100, 字地址支持 D,SD,R,T,C(C200-C255是32位寄存器), 位地址支持X,Y,M,SM,S,TS(定时器触点),TC(定时器线圈),CS(计数器触点),CC(计数器线圈)
+ The network port transparent transmission version of Fengwei communication protocol supports VS series, and the address supports carrying station number, + such as s=2;D100, word address supports D, SD, R, T, C (C200-C255 are 32-bit registers), Bit address supports X, Y, M, SM, S, TS (timer contact), + TC (timer coil), CS (counter contact), CC (counter coil) +
+ + 暂时不支持对字寄存器(D,R)进行读写位操作,感谢随时关注库的更新日志 + +
+ + + 实例化默认的构造方法
+ Instantiate the default constructor +
+
+ + + 使用指定的ip地址和端口来实例化一个对象
+ Instantiate an object with the specified IP address and port +
+ 设备的Ip地址 + 设备的端口号 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 丰炜的虚拟PLC,模拟了VS系列的通信,可以和对应的客户端进行数据读写测试,位地址支持 X,Y,M,S,字地址支持 D,R,SD + + + + + 实例化一个丰炜PLC的网口和串口服务器,支持数据读写操作 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 信捷PLC的相关辅助类 + + + + + 根据信捷PLC的地址,解析出转换后的modbus协议信息 + + PLC的系列信息 + 汇川plc的地址信息 + 原始的对应的modbus信息 + 还原后的modbus地址 + + + + 根据信捷PLC的地址,解析出转换后的modbus协议信息,适用XC系列 + + 站号的特殊指定信息,可以为空 + 信捷plc的地址信息 + 原始的对应的modbus信息 + 还原后的modbus地址 + + + + 解析信捷的XD1,XD2,XD3,XL1,XL3系列的PLC的Modbus地址和内部软元件的对照 + + 适用 XD1、XD2、XD3、XL1、XL3、XD5、XDM、XDC、XD5E、XDME、XL5、XL5E、XLME, XDH 只是支持的地址范围不一样而已 + 站号的特殊指定信息,可以为空 + PLC内部的软元件的地址 + 默认的Modbus功能码 + 解析后的Modbus地址 + + + + 信捷内部的TCP信息,该协议是信捷基于modbus协议扩展而来,支持更多的地址类型,以及更广泛的地址范围。具体参考Demo界面信息。
+ The TCP information inside Xinjie, which is extended by Xinjie based on the modbus protocol, + supports more address types and a wider range of addresses. For details, refer to the Demo UI. +
+
+ + + 实例化一个XINJE-Tcp协议的客户端对象
+ Instantiate a client object of the Modbus-Tcp protocol +
+
+ + + 指定服务器地址,端口号,客户端自己的站号来初始化
+ Specify the server address, port number, and client's own station number to initialize +
+ 服务器的Ip地址 + 服务器的端口号 + 客户端自身的站号 +
+ + + + + + 获取或者重新修改服务器的默认站号信息,当然,你可以再读写的时候动态指定,参见备注
+ Get or modify the default station number information of the server. Of course, you can specify it dynamically when reading and writing, see note +
+ + 当你调用 ReadCoil("100") 时,对应的站号就是本属性的值,当你调用 ReadCoil("s=2;100") 时,就忽略本属性的值,读写寄存器的时候同理 + +
+ + + + + + 字符串数据是否按照字来反转,默认为False
+ Whether the string data is reversed according to words. The default is False. +
+ + 字符串按照2个字节的排列进行颠倒,根据实际情况进行设置 + +
+ + + 获取协议自增的消息号,你可以自定义modbus的消息号的规则,详细参见说明,也可以查找说明。
+ Get the message number incremented by the modbus protocol. You can customize the rules of the message number of the modbus. For details, please refer to the description of , or you can find the description of +
+
+ + + + + + + + + + 地址支持 D100, SD100, TD100, CD100, HD100, FD100, ETD100, HTD100, HCD100, HSD100, 各自的地址范围取决于实际PLC的范围,比如D的地址在XLH型号上可达 0~499999
+ Address support D100, SD100, TD100, CD100, HD100, FD100, ETD100, HTD100, HCD100, HSD100, the respective address range depends on the actual PLC range, for example, the address of D can reach 0~499999 on the XLH model +
+
+ + + + 地址支持 M100, X100, Y100, SM100, T100, C100, HM100, HS100, HT100, HSC100 各自的地址范围取决于实际PLC的范围,比如M的地址在XLH型号上可达 0~199999
+ The address supports M100, X100, Y100, SM100, T100, C100, HM100, HS100, HT100, HSC100, the respective address range depends on the actual PLC range, for example, the address of M can reach 0~199999 on the XLH model +
+
+ + + + 地址支持 D100, SD100, TD100, CD100, HD100, FD100, ETD100, HTD100, HCD100, HSD100, 各自的地址范围取决于实际PLC的范围,比如D的地址在XLH型号上可达 0~499999
+ Address support D100, SD100, TD100, CD100, HD100, FD100, ETD100, HTD100, HCD100, HSD100, the respective address range depends on the actual PLC range, for example, the address of D can reach 0~499999 on the XLH model +
+
+ + + + 地址支持 M100, Y100, SM100, T100, C100, 各自的地址范围取决于实际PLC的范围,比如M的地址在XLH型号上可达 0~199999
+ The address supports M100, Y100, SM100, T100, C100, the respective address range depends on the actual PLC range, for example, the address of M can reach 0~199999 on the XLH model +
+
+ + + + + + + + + + + + + + + + + + 信捷内部TCP的虚拟服务器类,基于Modbus的虚拟服务器扩展而来,从服务上只支持modbus地址读写,从客户端额外支持M,D,SD,SM,HD 五个数据区
+ Xinjie's internal TCP virtual server class, based on Modbus virtual server extension, + only supports modbus address reading and writing from the service, and additionally supports M, D, SD, SM, HD five data areas from the client +
+
+ + + 实例化一个默认参数的mc协议的服务器
+ Instantiate a mc protocol server with default parameters +
+
+ + + + + + + + + + + + + + + + + + 将状态码,数据打包成一个完成的回复报文信息 + + 原始的命令数据 + 状态信息 + 数据 + 状态信息 + + + + + + + 信捷PLC的XC,XD,XL系列的串口转网口通讯类,虽然硬件层走的是TCP协议,但是底层使用ModbusRtu协议实现,每个系列支持的地址类型及范围不一样,详细参考Demo程序
+ Xinje PLC's XC, XD, XL series serial port to network port communication type, although the hardware layer uses TCP protocol, + but the bottom layer is implemented by ModbusRtu protocol. The address types and ranges supported by each series are different. + Please refer to the DEMO for details. +
+ + 对于XC系列适用于XC1/XC2/XC3/XC5/XCM/XCC系列,线圈支持X,Y,S,M,T,C,寄存器支持D,F,E,T,C
+ 对于XD,XL系列适用于XD1/XD2/XD3/XD5/XDM/XDC/XD5E/XDME/XDH/XL1/XL3/XL5/XL5E/XLME, + 线圈支持X,Y,S,M,SM,T,C,ET,SEM,HM,HS,HT,HC,HSC 寄存器支持D,ID,QD,SD,TD,CD,ETD,HD,HSD,HTD,HCD,HSCD,FD,SFD,FS
+
+
+ + + 实例化一个默认的对象 + + + + + 通过指定站号,ip地址,端口号来实例化一个新的对象 + + Ip地址 + 端口号 + 站号信息 + + + + 通过指定站号,IP地址,端口以及PLC的系列来实例化一个新的对象
+ Instantiate a new object by specifying the station number and PLC series +
+ PLC的系列 + Ip地址 + 端口号 + 站号信息 +
+ + + 获取或设置当前的信捷PLC的系列,默认XC系列 + + + + + + + + + + + 信捷PLC的不同系列的枚举 + + + + + XC系列 + + + + + XD系列 + + + + + XL系列 + + + + + 信捷PLC的XC,XD,XL系列的串口通讯类,底层使用ModbusRtu协议实现,每个系列支持的地址类型及范围不一样,详细参考DEMO程序说明
+ XC, XD, XL series serial communication of Xinje PLC, the bottom layer is implemented by ModbusRtu protocol, + the address type and range supported by each series are different, please refer to the Demo for details +
+ + 地址可以携带站号访问,例如 s=2;M100
+ 对于XC系列适用于XC1/XC2/XC3/XC5/XCM/XCC系列,线圈支持X,Y,S,M,T,C,寄存器支持D,F,E,T,C
+ 对于XD,XL系列适用于XD1/XD2/XD3/XD5/XDM/XDC/XD5E/XDME/XDH/XL1/XL3/XL5/XL5E/XLME, + 线圈支持X,Y,S,M,SM,T,C,ET,SEM,HM,HS,HT,HC,HSC 寄存器支持D,ID,QD,SD,TD,CD,ETD,HD,HSD,HTD,HCD,HSCD,FD,SFD,FS
+
+
+ + + 实例化一个默认的对象 + + + + + 指定客户端自己的站号来初始化
+ Specify the client's own station number to initialize +
+ 客户端自身的站号 +
+ + + 通过指定站号以及PLC的系列来实例化一个新的对象
+ Instantiate a new object by specifying the station number and PLC series +
+ PLC的系列 + 站号信息 +
+ + + 获取或设置当前的信捷PLC的系列,默认XC系列 + + + + + + + + + + + 信捷PLC的XC,XD,XL系列的网口通讯类,底层使用ModbusTcp协议实现,每个系列支持的地址类型及范围不一样,详细参考Demo程序
+ XC, XD, XL series of Xinje PLC's network port communication class, the bottom layer is realized by ModbusTcp protocol, + each series supports different address types and ranges, please refer to the Demo for details +
+ + 对于XC系列适用于XC1/XC2/XC3/XC5/XCM/XCC系列,线圈支持X,Y,S,M,T,C,寄存器支持D,F,E,T,C
+ 对于XD,XL系列适用于XD1/XD2/XD3/XD5/XDM/XDC/XD5E/XDME/XDH/XL1/XL3/XL5/XL5E/XLME, + 线圈支持X,Y,S,M,SM,T,C,ET,SEM,HM,HS,HT,HC,HSC 寄存器支持D,ID,QD,SD,TD,CD,ETD,HD,HSD,HTD,HCD,HSCD,FD,SFD,FS
+
+
+ + + 实例化一个默认的对象 + + + + + 通过指定站号,ip地址,端口号来实例化一个新的对象 + + Ip地址 + 端口号 + 站号信息 + + + + 通过指定站号,IP地址,端口以及PLC的系列来实例化一个新的对象
+ Instantiate a new object by specifying the station number and PLC series +
+ PLC的系列 + Ip地址 + 端口号 + 站号信息 +
+ + + 获取或设置当前的信捷PLC的系列,默认XC系列 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 日本山武的数字指示调节器,目前适配SDC40B + + + + + 实例化一个默认的对象 + + + + + 获取或设置当前的站号信息 + + + + + + + + + + + + + + + + + 山武的数字指定调节器的通信协议,基于CPL转网口的实现,测试型号 SDC40B + + + + + 实例化一个默认的对象 + + + + + + + + 获取或设置当前的站号信息 + + + + + + + + + + + + + + + + + + + + 山武的数字指示调节器的虚拟设备,支持和HSL本身进行数据通信测试
+ Yamatake’s digital indicating regulator is a virtual device that supports data communication testing with HSL itself +
+
+ + + 实例化一个默认的对象
+ Instantiate a default object +
+
+ + + 获取或设置当前虚拟仪表的站号信息,如果站号不一致,将不予访问
+ Get or set the station number information of the current virtual instrument. If the station number is inconsistent, it will not be accessed +
+
+ + + + + + + + + + + + + + + + + + + + + 辅助类方法 + + + + + 构建写入操作的报文信息 + + 站号 + 地址 + 长度的长度 + 报文内容 + + + + 构建写入操作的命令报文 + + 站号信息 + 数据的地址 + 等待写入的值 + 写入的报文命令 + + + + 用于服务器反馈的数据的报文打包操作 + + 站号 + 错误码,如果为0则表示正常 + 原始数据值信息 + 数据类型 + 打包的报文数据信息 + + + + 根据错误码获取到相关的错误代号信息 + + 错误码 + 错误码对应的文本描述信息 + + + + 从反馈的数据内容中解析出真实的数据信息 + + 仪表反馈的真实的数据信息 + 解析之后的实际数据信息 + + + + Memobus协议的接口信息 + + + + + 获取或设置发送目标的CPU的编号信息,默认为 2
+ Get or set the CPU number information of the sending destination, the default is 2 +
+
+ + + 获取或设置发送源的CPU的编号信息,默认为 1
+ Get or set the number information of the sending source CPU, the default is 1 +
+
+ + + Memobus的辅助类对象 + + + + + 构建读取的命令报文,支持功能码 01,02,03,04,09,0A + + 主功能码 + 子功能码 + 目标的CPU编号 + 发送源CPU编号 + 起始地址 + 读取地址长度 + 结果报文信息 + + + + 构建写入单一的线圈的状态变更的报文 + + 主功能码 + 子功能码 + 目标的CPU编号 + 发送源CPU编号 + 起始地址 + 写入的通断值信息 + 写入的报文 + + + + + 默认使用功能码01,读取线圈操作,如果需要指定读取输入线圈,地址需要携带额外的参数,例如 x=2;100
+ The function code 01 is used by default to read the coil operation. If you need to specify the read input coil, the address needs to carry additional parameters, such as x=2;100 +
+
+ + + + 单一线圈的状态变更,使用的主功能码为0x20, 子功能码为0x05
+ The status of a single coil is changed, the main function code used is 0x20, and the sub function code is 0x05 +
+
+ + + + 多个线圈的状态更改,默认使用的是 0x0f 子功能码。
+ The status of multiple coils is changed, and the sub-function code 0x0f is used by default. +
+
+ + + + 地址默认使用功能码03,如果需要指定其他的功能码地址,需要手动指定功能码,例如:x=4;100, x=9;100, x=10;100, 当然也可以写成 x=0x0A;100
+ The address uses function code 03 by default. If you need to specify other function code addresses, + you need to manually specify the function code, for example: x=4;100, x=9;100, x=10;100, of course, it can also be written as x=0x0A; 100 +
+
+ + + + 连续的寄存器写入操作,默认功能码是0x10,如果需要写入扩展的寄存器,使用 x=0xA;100 或是 x=10;100 即可。
+ For continuous register write operation, the default function code is 0x10. If you need to write an extended register, use x=0xA;100 or x=10;100. +
+
+ + + + 单一保持寄存器的值变更,使用的主功能码为0x20, 默认子功能码为0x06,也可以写入扩展的保持型寄存器,子功能码为0x0B
+ The value of a single hold register is changed, using a primary function code of 0x20 and a default subfunction code of 0x06, or an extended holding register with a subfunction code of 0x0B +
+
+ + + + 单一保持寄存器的值变更,使用的主功能码为0x20, 默认子功能码为0x06
+ The value of a single hold register changes, using a primary function code of 0x20 and a default subfunction code of 0x06 +
+
+ + + 随机读取扩展的保持寄存器的内容,也即读取不连续地址的字数据,可以指定多个地址,然后一次性读取所有的数据,然后解析出实际的数据
+ Randomly read the contents of the extended hold register, that is, read word data of discontinuous addresses, + you can specify multiple addresses, then read all the data at once, and then parse out the actual data +
+ + 注意,本方法只能针对扩展的保持寄存器进行读取 + + PLC通信对象 + 地址信息 + 读取的原始字节结果信息 +
+ + + 随机写入扩展的保持寄存器的内容,也即写入不连续的地址的字数据,字节数组的长度必须为地址数组长度的两倍,才能正确写入。
+ Write the contents of the extended hold registers randomly, that is, write word data for discontinuous addresses, + and the byte array must be twice the length of the address array to be written correctly. +
+ + 注意,本方法只能针对扩展的保持寄存器进行读取 + + PLC通信对象 + 地址信息 + 数据信息 + 是否写入成功的结果对象 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 扩展的Memobus协议信息,除了支持普通的线圈,输入继电器,保持寄存器,输入寄存器的读写操作,还支持扩展的保持寄存器和输入寄存器读写操作。
+ The extended Memobus protocol information not only supports reading and writing operations of ordinary coils, input relays, + holding registers, and input registers, but also supports reading and writing operations of extended holding registers and input registers. +
+ + 其中线圈和输入继电器使用,的方法,读取输入继电器地址:x=2;100。 + 其他的方法针对的是寄存器,保持型寄存器地址:100或 x=3;100,输入寄存器:x=4;100,扩展保持型寄存器x=9;100,写入x=11;100, 扩展输入寄存器:x=10;100
+ The coil and input relay use and , method, + read the input relay address: x=2;100. Other methods are for registers, holding register address: 100 or x=3;100, input register: x=4;100, + extended holding register x=9;100, writing x=11;100, extended input Register: x=10;100 +

+ 读取的最大的字为 2044 个字,写入的最大的字数为 2043 个字 +
+
+ + + 实例化一个Memobus-Tcp协议的客户端对象
+ Instantiate a client object of the Memobus-Tcp protocol +
+
+ + + 指定服务器地址,端口号,客户端自己的站号来初始化
+ Specify the server address, port number, and client's own station number to initialize +
+ 服务器的Ip地址 + 服务器的端口号 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 基于扩展memobus协议的虚拟服务器,支持线圈,输入线圈,保持型寄存器,输入寄存器,保持型寄存器(扩展),输入寄存器(扩展)的读写。对于远程客户端来说,还支持对扩展保持寄存器的随机字读取和写入操作。
+ A virtual server based on the extended memobus protocol, which supports the reading and writing of coils, input coils, holding registers, input registers, + holding registers (expansion), input registers (expansion). For remote clients, random word reads and writes to extended hold registers are also supported. +
+ + 支持的功能码为 01 02 03 04 05 06 08 09 0A 0B 0D 0E 0F 10, 访问方式分为位读写和字读写,位读写:线圈:100; 输入线圈:x=2;100
+ 字读写时,保持型寄存器:100; 输入寄存器:x=4;100 保持型寄存器(扩展): x=9;100 输入寄存器(扩展): x=10;100 +
+
+ + + 实例化一个memobus协议的PLC的服务器,支持线圈,输入线圈,保持型寄存器,输入寄存器,保持型寄存器(扩展),输入寄存器(扩展)的读写。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 实例化一个Memobus-Tcp协议的客户端对象
+ Instantiate a client object of the Memobus-Tcp protocol +
+
+ + + 指定服务器地址,端口号,客户端自己的站号来初始化
+ Specify the server address, port number, and client's own station number to initialize +
+ 服务器的Ip地址 + 服务器的端口号 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 横河PLC的通信辅助类。 + + + + + 获取横河PLC的错误的具体描述信息 + + 错误码 + 错误的描述信息 + + + + 横河PLC的虚拟服务器,支持X,Y,I,E,M,T,C,L继电器类型的数据读写,支持D,B,F,R,V,Z,W,TN,CN寄存器类型的数据读写,可以用来测试横河PLC的二进制通信类型
+ Yokogawa PLC's virtual server, supports X, Y, I, E, M, T, C, L relay type data read and write, + supports D, B, F, R, V, Z, W, TN, CN register types The data read and write can be used to test the binary communication type of Yokogawa PLC +
+ + 其中的X继电器可以在服务器进行读写操作,但是远程的PLC只能进行读取,所有的数据读写的最大的范围按照协议进行了限制。 + + + 你可以很快速并且简单的创建一个虚拟的横河服务器 + + 当然如果需要高级的服务器,指定日志,限制客户端的IP地址,获取客户端发送的信息,在服务器初始化的时候就要参照下面的代码: + + 服务器创建好之后,我们就可以对服务器进行一些读写的操作了,下面的代码是基础的BCL类型的读写操作。 + + 高级的对于byte数组类型的数据进行批量化的读写操作如下: + + 更高级操作请参见源代码。 + +
+ + + 实例化一个横河PLC的服务器,支持X,Y,I,E,M,T,C,L继电器类型的数据读写,支持D,B,F,R,V,Z,W,TN,CN寄存器类型的数据读写
+ Instantiate a Yokogawa PLC server, support X, Y, I, E, M, T, C, L relay type data read and write, + support D, B, F, R, V, Z, W, TN, CN Register type data reading and writing +
+
+ + + + + + + + + + + + + + + 如果未执行程序,则开始执行程序
+ Starts executing a program if it is not being executed +
+
+ + + 停止当前正在执行程序
+ Stops the executing program. +
+
+ + + + + + + + + + + + + + + + + + + + + 横河PLC的二进制通信类,支持X,Y,I,E,M,T,C,L继电器类型的数据读写,支持D,B,F,R,V,Z,W,TN,CN寄存器类型的数据读写,还支持一些高级的信息读写接口,详细参考Demo界面。
+ Yokogawa PLC's binary communication type, supports X, Y, I, E, M, T, C, L relay type data read and write, + supports D, B, F, R, V, Z, W, TN, CN registers Types of data reading and writing, and some advanced information reading and writing interfaces are also supported. + Please refer to the Demo UI. +
+ + 基础的数据读写面向VIP用户开放,高级的读写随机数据,启动停止命令,读取程序状态, + 系统信息,PLC时间,读写特殊的模块数据需要商业用户授权,读取的数据长度,读取的随机地址长度,在商业授权下,长度不受限制,可以无限大。 + + + 例如我们正常读取一个D100的数据如下: + + 我们在读取的时候可以动态的变更cpu信息,参考下面的代码 + + 关于随机读写的代码示例,可以读写地址分布很散的地址,参考下面的代码 + + 最后看一下读取特殊模块的数据,可以读取基本的字节数据,也可以使用富文本的地址读取 + + +
+ + + 实例化一个默认的对象
+ Instantiate a default object +
+
+ + + 指定IP地址和端口号来实例化一个对象
+ Specify the IP address and port number to instantiate an object +
+ Ip地址 + 端口号 +
+ + + + + + 获取或设置当前的CPU Number,默认值为1
+ Get or set the current CPU Number, the default value is 1 +
+
+ + + + 读取的线圈地址支持X,Y,I,E,M,T,C,L,寄存器地址支持D,B,F,R,V,Z,W,TN,CN,举例:D100;也可以携带CPU进行访问,举例:cpu=2;D100
+ [商业授权] 如果想要读取特殊模块的数据,需要使用 Special: 开头标记,举例:Special:unit=0;slot=1;100
+ The read coil address supports X, Y, I, E, M, T, C, L, and the register address supports D, B, F, R, V, Z, W, TN, CN, for example: D100; + it can also be carried CPU access, for example: cpu=2;D100.
+ [Authorization] If you want to read the data of a special module, you need to use the Special: beginning tag, for example: Special:unit=0;slot=1;100 +
+
+ + + + 写入的线圈地址支持Y,I,E,M,T,C,L,寄存器地址支持D,B,F,R,V,Z,W,TN,CN,举例:D100;也可以携带CPU进行访问,举例:cpu=2;D100
+ 如果想要写入特殊模块的数据,需要使用 Special: 开头标记,举例:Special:unit=0;slot=1;100
+ The read coil address supports Y, I, E, M, T, C, L, and the register address supports D, B, F, R, V, Z, W, TN, CN, for example: D100; + it can also be carried CPU access, for example: cpu=2;D100. + If you want to read the data of a special module, you need to use the Special: beginning tag, for example: Special:unit=0;slot=1;100 +
+
+ + + + 读取的线圈地址支持X,Y,I,E,M,T,C,L,举例:Y100;也可以携带CPU进行访问,举例:cpu=2;Y100
+ The read coil address supports X, Y, I, E, M, T, C, L, for example: Y100; you can also carry the CPU for access, for example: cpu=2;Y100 +
+
+ + + + 写入的线圈地址支持Y,I,E,M,T,C,L,举例:Y100;也可以携带CPU进行访问,举例:cpu=2;Y100
+ The write coil address supports Y, I, E, M, T, C, L, for example: Y100; you can also carry the CPU for access, for example: cpu=2;Y100 +
+
+ + + [商业授权] 随机读取数组信息,主需要出传入数组地址信息,就可以返回批量
+ [Authorization] Random read array information, the master needs to pass in the array address information, and then the batch can be returned to value +
+ 批量地址信息 + + 读取的线圈地址支持X,Y,I,E,M,T,C,L,举例:Y100;也可以携带CPU进行访问,举例:cpu=2;Y100
+ The read coil address supports X, Y, I, E, M, T, C, L, for example: Y100; you can also carry the CPU for access, for example: cpu=2;Y100 +
+ 带有成功标志的Bool数组信息 +
+ + + [商业授权] 随机写入数组信息,主需要出传入数组地址信息,以及对应的数组值
+ [Authorization] Randomly write the array information, the main need to pass in the array address information, + and the corresponding array value +
+ 批量地址信息 + 批量的数据值信息 + + 写入的线圈地址支持Y,I,E,M,T,C,L,举例:Y100;也可以携带CPU进行访问,举例:cpu=2;Y100
+ The write coil address supports Y, I, E, M, T, C, L, for example: Y100; you can also carry the CPU for access, for example: cpu=2;Y100 +
+ 是否写入成功 +
+ + + [商业授权] 随机读取数组信息,主需要出传入数组地址信息,就可以返回批量
+ [Authorization] Random read array information, the master needs to pass in the array address information, and then the batch can be returned to value +
+ + Supports D,B,F,R,V,Z,W,TN,CN,example: D100 + + 批量地址信息 + 带有成功标志的Bool数组信息 +
+ + + [商业授权] 随机读取数组信息,主需要出传入数组地址信息,就可以返回批量
+ [Authorization] Random read array information, the master needs to pass in the array address information, and then the batch can be returned to value +
+ 批量地址信息 + 带有成功标志的Bool数组信息 +
+ + + [商业授权] 随机读取数组信息,主需要出传入数组地址信息,就可以返回批量
+ [Authorization] Random read array information, the master needs to pass in the array address information, and then the batch can be returned to value +
+ + Supports D, B, F, R, V, Z, W, TN, CN,example: D100 + + 批量地址信息 + 带有成功标志的Bool数组信息 +
+ + + [商业授权] 随机写入数组信息,主需要出传入数组地址信息,以及对应的数组值
+ [Authorization] Randomly write the array information, the main need to pass in the array address information, + and the corresponding array value +
+ + Supports D, B, F, R, V, Z, W, TN, CN,example: D100 + + 批量地址信息 + 批量的数据值信息 + 是否写入成功 +
+ + + [商业授权] 随机写入数组信息,主需要出传入数组地址信息,以及对应的数组值
+ [Authorization] Randomly write the array information, the main need to pass in the array address information, + and the corresponding array value +
+ + Supports D, B, F, R, V, Z, W, TN, CN,example: D100 + + 批量地址信息 + 批量的数据值信息 + 是否写入成功 +
+ + + [商业授权] 随机写入数组信息,主需要出传入数组地址信息,以及对应的数组值
+ [Authorization] Randomly write the array information, the main need to pass in the array address information, + and the corresponding array value +
+ + Supports D, B, F, R, V, Z, W, TN, CN,example: D100 + + 批量地址信息 + 批量的数据值信息 + 是否写入成功 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [商业授权] 如果未执行程序,则开始执行程序
+ [Authorization] Starts executing a program if it is not being executed +
+ + This command will be ignored if it is executed while a program is being executed.
+ Refer to the users manual for the individual modules for the response formats that are used at error times. +
+ 是否启动成功 +
+ + + [商业授权] 停止当前正在执行程序
+ [Authorization] Stops the executing program. +
+ + This command will be ignored if it is executed when no program is being executed.
+ Refer to the users manual for the individual modules for the response formats that are used at error times. +
+ 是否启动成功 +
+ + + [商业授权] 重置当前的模块,当前打开的连接被强制关闭。 模块中所做的设置也将被清除。然后当前对象需要重连PLC。
+ [Authorization] When this command is executed via an Ethernet interface module or an Ethernet connection of an F3SP66, F3SP67, + F3SP71 or F3SP76 sequence CPU module, the connection which is currently open is forced to close. + The settings made in the modules are also cleared. Then the current object needs to reconnect to the PLC. +
+ 是否重置成功 +
+ + + [商业授权] 读取当前PLC的程序状态,返回1:RUN;2:Stop;3:Debug;255:ROM writer
+ [Authorization] Read the program status. return code 1:RUN; 2:Stop; 3:Debug; 255:ROM writer +
+ 当前PLC的程序状态,返回1:RUN;2:Stop;3:Debug;255:ROM writer +
+ + + [商业授权] 读取当前PLC的系统状态,系统的ID,CPU类型,程序大小信息
+ [Authorization] Read current PLC system status, system ID, CPU type, program size information +
+ 系统信息的结果对象 +
+ + + [商业授权] 读取当前PLC的时间信息,包含年月日时分秒
+ [Authorization] Read current PLC time information, including year, month, day, hour, minute, and second +
+ PLC的当前的时间信息 +
+ + + [商业授权] 读取特殊模块的数据信息,需要指定模块单元号,模块站号,数据地址,长度信息。
+ [Authorization] To read the data information of a special module, you need to specify the module unit number, module slot number, data address, and length information. +
+ 模块的单元号 + 模块的站号 + 模块的数据地址 + 长度信息 + 带有成功标识的byte[],可以自行解析出所需要的各种类型的数据 +
+ + + + + + + + + + + + + + + + + + + + + + + + 检查当前的反馈内容,如果没有发生错误,就解析出实际的数据内容。
+ Check the current feedback content, if there is no error, parse out the actual data content. +
+ 原始的数据内容 + 解析之后的数据内容 +
+ + + 构建读取命令的原始报文信息 + + Cpu Number + 地址数据信息 + 数据长度信息 + 是否位访问 + 实际的读取的报文信息 + + + + 构建随机读取的原始报文的初始命令 + + Cpu Number + 实际的数据地址信息 + 是否是位读取 + 实际的读取的报文信息 + + + + 构建批量写入Bool数组的命令,需要指定CPU Number信息和设备地址信息 + + Cpu Number + 设备地址数据 + 实际的bool数组 + 构建的写入指令 + + + + 构建批量随机写入Bool数组的命令,需要指定CPU Number信息和设备地址信息 + + Cpu Number + 设备地址数据 + 实际的bool数组 + 构建的写入指令 + + + + 构建字写入的命令报文信息,需要指定设备地址 + + Cpu Number + 地址 + 原始的数据值 + 原始的报文命令 + + + + 构建随机写入字的命令的报文 + + Cpu Number + 地址 + 原始的数据值 + 原始的报文命令 + + + + 构建启动PLC的命令报文 + + Cpu Number + 原始的报文命令 + + + + 构建停止PLC的命令报文 + + Cpu Number + 原始的报文命令 + + + + 构建读取特殊模块的命令报文 + + Cpu Number + 模块单元号 + 模块站号 + 数据位置 + 长度信息 + 原始的报文命令 + + + + 构建读取特殊模块的命令报文,需要传入高级地址,必须以 Special: 开头表示特殊模块地址,示例:Special:cpu=1;unit=0;slot=1;100
+ To construct a command message to read a special module, the advanced address needs to be passed in. + It must start with Special: to indicate the address of the special module, for example: Special:cpu=1;unit=0;slot=1;100 +
+ Cpu Number + 高级的混合地址,除了Cpu可以不携带,例如:Special:unit=0;slot=1;100 + 长度信息 + 原始的报文命令 +
+ + + 构建读取特殊模块的命令报文 + + Cpu Number + 模块单元号 + 模块站号 + 数据位置 + 数据内容 + 原始的报文命令 + + + + 构建写入特殊模块的命令报文,需要传入高级地址,必须以 Special: 开头表示特殊模块地址,示例:Special:cpu=1;unit=0;slot=1;100
+ To construct a command message to write a special module, the advanced address needs to be passed in. + It must start with Special: to indicate the address of the special module, for example: Special:cpu=1;unit=0;slot=1;100 +
+ Cpu Number + 高级的混合地址,除了Cpu可以不携带,例如:Special:unit=0;slot=1;100 + 写入的原始数据内容 + 原始的报文命令 +
+ + + + + + 横河PLC的系统基本信息
+ Basic system information of Yokogawa PLC +
+
+ + + 当前系统的ID名称,例如F3SP21-ON
+ The ID name of the current system, such as F3SP21-ON +
+
+ + + 当前系统的修订版本号
+ The revision number of the current system +
+
+ + + 当前系统的类型,分为 SequenceBASIC
+ The type of the current system, divided into Sequence and BASIC +
+
+ + + 当前系统的程序大小,如果是Sequence系统,就是步序总量,如果是BASIC系统,就是字节数量
+ The program size of the current system, if it is a Sequence system, it is the total number of steps, if it is a BASIC system, it is the number of bytes +
+
+ + + + + + 根据原始的数据信息解析出对象
+ Analyze the object according to the original data information +
+ 原始的数据信息 + 是否解析成功的结果对象 +
+ + + 一个强类型的资源类,用于查找本地化的字符串等。 + + + + + 返回此类使用的缓存的 ResourceManager 实例。 + + + + + 重写当前线程的 CurrentUICulture 属性,对 + 使用此强类型资源类的所有资源查找执行重写。 + + + + + 查找 System.Drawing.Bitmap 类型的本地化资源。 + + + + + 查找 System.Drawing.Bitmap 类型的本地化资源。 + + + + + 查找 System.Drawing.Bitmap 类型的本地化资源。 + + + + + 查找 System.Drawing.Bitmap 类型的本地化资源。 + + + + + 查找 System.Drawing.Bitmap 类型的本地化资源。 + + + + + 查找 System.Drawing.Bitmap 类型的本地化资源。 + + + + + 查找 System.Drawing.Bitmap 类型的本地化资源。 + + + + + 查找 System.Drawing.Bitmap 类型的本地化资源。 + + + + + 查找 System.Drawing.Bitmap 类型的本地化资源。 + + + + + 查找 System.Drawing.Bitmap 类型的本地化资源。 + + + + + 查找 System.Drawing.Bitmap 类型的本地化资源。 + + + + + 查找 System.Drawing.Bitmap 类型的本地化资源。 + + + + + 查找 System.Drawing.Bitmap 类型的本地化资源。 + + + + + 查找 System.Drawing.Bitmap 类型的本地化资源。 + + + + + 查找 System.Drawing.Bitmap 类型的本地化资源。 + + + + + 查找 System.Drawing.Bitmap 类型的本地化资源。 + + + + + 查找 System.Drawing.Bitmap 类型的本地化资源。 + + + + + 查找 System.Drawing.Bitmap 类型的本地化资源。 + + + + + 查找 System.Drawing.Bitmap 类型的本地化资源。 + + + + + 查找 System.Drawing.Bitmap 类型的本地化资源。 + + + + + 查找 System.Drawing.Bitmap 类型的本地化资源。 + + + + + 查找 System.Drawing.Bitmap 类型的本地化资源。 + + + + + 查找 System.Drawing.Bitmap 类型的本地化资源。 + + + + + 查找 System.Drawing.Bitmap 类型的本地化资源。 + + + + + 查找 System.Drawing.Bitmap 类型的本地化资源。 + + + + + 查找 System.Drawing.Bitmap 类型的本地化资源。 + + + + + 查找 System.Drawing.Bitmap 类型的本地化资源。 + + + + + 查找 System.Drawing.Bitmap 类型的本地化资源。 + + + + + 查找 System.Drawing.Bitmap 类型的本地化资源。 + + + + + 查找 System.Drawing.Bitmap 类型的本地化资源。 + + + + + 查找 System.Drawing.Bitmap 类型的本地化资源。 + + + + + 查找 System.Drawing.Bitmap 类型的本地化资源。 + + + + + 查找 System.Drawing.Bitmap 类型的本地化资源。 + + + + + 查找 System.Drawing.Bitmap 类型的本地化资源。 + + + + + 查找 System.Drawing.Bitmap 类型的本地化资源。 + + + + + 查找 System.Drawing.Bitmap 类型的本地化资源。 + + + + + 查找 System.Drawing.Bitmap 类型的本地化资源。 + + + + + 查找 System.Drawing.Bitmap 类型的本地化资源。 + + + + + 查找 System.Drawing.Bitmap 类型的本地化资源。 + + + + + ABB机器人的web api接口的客户端,可以方便快速的获取到abb机器人的一些数据信息
+ The client of ABB robot's web API interface can easily and quickly obtain some data information of ABB robot +
+ + 参考的界面信息是:http://developercenter.robotstudio.com/webservice/api_reference + + 关于额外的地址说明,如果想要查看,可以调用 返回字符串列表来看看。 + +
+ + + 使用指定的ip地址来初始化对象
+ Initializes the object using the specified IP address +
+ Ip地址信息 +
+ + + 使用指定的ip地址和端口号来初始化对象
+ Initializes the object with the specified IP address and port number +
+ Ip地址信息 + 端口号信息 +
+ + + 使用指定的ip地址,端口号,用户名,密码来初始化对象
+ Initialize the object with the specified IP address, port number, username, and password +
+ Ip地址信息 + 端口号信息 + 用户名 + 密码 +
+ + + + + + + + + + + + + + + + + + + + + 获取当前支持的读取的地址列表
+ Gets a list of addresses for currently supported reads +
+ 数组信息 +
+ + + 获取当前的控制状态,Content属性就是机器人的控制信息
+ Get the current control state. The Content attribute is the control information of the robot +
+ 带有状态信息的结果类对象 +
+ + + 获取当前的错误状态,Content属性就是机器人的状态信息
+ Gets the current error state. The Content attribute is the state information of the robot +
+ 带有状态信息的结果类对象 +
+ + + 获取当前机器人的物理关节点信息,返回json格式的关节信息
+ Get the physical node information of the current robot and return the joint information in json format +
+ 带有关节信息的结果类对象 +
+ + + 获取当前机器人的速度配比信息
+ Get the speed matching information of the current robot +
+ 带有速度信息的结果类对象 +
+ + + 获取当前机器人的工作模式
+ Gets the current working mode of the robot +
+ 带有工作模式信息的结果类对象 +
+ + + 获取当前机器人的本机的输入IO
+ Gets the input IO of the current robot's native +
+ 带有IO信息的结果类对象 +
+ + + 获取当前机器人的本机的输出IO
+ Gets the output IO of the current robot's native +
+ 带有IO信息的结果类对象 +
+ + + + + + + + + 获取当前机器人的日志记录,默认记录为10条
+ Gets the log record for the current robot, which is 10 by default +
+ 读取的最大的日志总数 + 带有IO信息的结果类对象 +
+ + + 获取当前机器人的系统信息,版本号,唯一ID等信息
+ Get the current robot's system information, version number, unique ID and other information +
+ 系统的基本信息 +
+ + + 获取机器人的目标坐标信息
+ Get the current robot's target information +
+ 系统的基本信息 +
+ + + 获取当前机器人的伺服使能状态
+ Get the current robot servo enable state +
+ 机器人的伺服使能状态 +
+ + + 获取当前机器人的当前程序运行状态
+ Get the current program running status of the current robot +
+ 机器人的当前的程序运行状态 +
+ + + 获取当前机器人的任务列表
+ Get the task list of the current robot +
+ 任务信息的列表 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [商业授权] ABB机器人的虚拟服务器,基于WebApi协议构建,可用于读取一些数据信息
+ [Authorization]The virtual server of ABB robot, built based on the WebApi protocol, can be used to read some data information +
+ + 本虚拟服务器实例化之后,就可以启动了,需要注意的是,程序需要管理员模式运行,否则启动服务的时候会报错,显示拒绝当前的操作。 + 支持和进行测试通信。本服务器的运行需要商业授权支持,否则只能运行24小时。 + +
+ + + 设置用户的登录信息,用户名和密码信息
+ Set user login information, user name and password information +
+ 用户名 + 密码 +
+ + + + + + + + + 埃夫特机器人的数据结构
+ The data structure of the efort robot +
+
+ + + 实例化一个默认的对象 + + + + + 报文开始的字符串 + + + + + 数据命令 + + + + + 数据心跳 + + + + + 报警状态,1:有报警,0:无报警 + + + + + 急停状态,1:无急停,0:有急停 + + + + + 权限状态,1:有权限,0:无权限 + + + + + 伺服状态,1:有使能,0:未使能 + + + + + 轴运动状态,1:有运动,0:未运动 + + + + + 程序运行状态,1:有运行,0:未运行 + + + + + 程序加载状态,1:有加载,0:无加载 + + + + + 程序暂停状态,1:有暂停,0:无暂停 + + + + + 模式状态,1:手动,2:自动,3:远程 + + + + + 读读状态,百分比(单位) + + + + + IoDOut状态 + + + + + IoDIn状态 + + + + + IoIOut状态 + + + + + IoIIn状态 + + + + + 加载工程名 + + + + + 加载程序名 + + + + + 错误信息 + + + + + 一到七轴的角度 + + + + + X,Y,Z,A,B,C方向,也叫笛卡尔坐标系 + + + + + 一到七轴的速度 + + + + + 一到七轴的加速度 + + + + + 一到七轴的加加速度 + + + + + 一到七轴的力矩 + + + + + 轴反向计数 + + + + + 轴工作总时长 + + + + + 设备开机总时长 + + + + + 报文结束标记 + + + + + 从之前的版本数据构造一个埃夫特机器人的数据类型 + + 真实的数据内容 + 转换的结果内容 + + + + 从新版本数据构造一个埃夫特机器人的数据类型 + + 真实的数据内容 + 转换的结果内容 + + + + 埃夫特机器人对应型号为ER7B-C10,此协议为定制版,新版报文对齐
+ The corresponding model of efort robot is er7b-c10. This protocol is the customized version, and the new version is the message alignment +
+ + 针对的控制器是KEBA控制器 + +
+ + + 实例化一个默认的对象,并指定IP地址和端口号,端口号通常为8008
+ Instantiate a default object and specify the IP address and port number, usually 8008 +
+ Ip地址 + 端口号 +
+ + + + + + 获取发送的消息的命令
+ Gets the command to send the message +
+ 字节数组命令 +
+ + + + + + + + + 本机器人不支持该方法操作,将永远返回失败,无效的操作
+ This robot does not support this method operation, will always return failed, invalid operation +
+ 指定的地址信息,有些机器人可能不支持 + 原始的字节数据信息 + 是否成功的写入 +
+ + + 本机器人不支持该方法操作,将永远返回失败,无效的操作
+ This robot does not support this method operation, will always return failed, invalid operation +
+ 指定的地址信息,有些机器人可能不支持 + 字符串的数据信息 + 是否成功的写入 +
+ + + 读取机器人的详细信息,返回解析后的数据类型
+ Read the details of the robot and return the resolved data type +
+ 结果数据信息 +
+ + + + + + + + + + + + + + + + + + + + + 埃夫特机器人对应型号为ER7B-C10,此协议为旧版的定制版,报文未对齐的版本
+ The corresponding model of the efort robot is er7b-c10. This protocol is a customized version of the old version, and the message is not aligned +
+
+ + + 实例化一个默认的对象,并指定IP地址和端口号,端口号通常为8008
+ Instantiate a default object and specify the IP address and port number, usually 8008 +
+ Ip地址 + 端口号 +
+ + + + + + 获取发送的消息的命令
+ Gets the command to send the message +
+ 字节数组命令 +
+ + + + + + + + + 本机器人不支持该方法操作,将永远返回失败,无效的操作
+ This robot does not support this method operation, will always return failed, invalid operation +
+ 指定的地址信息,有些机器人可能不支持 + 原始的字节数据信息 + 是否成功的写入 +
+ + + 本机器人不支持该方法操作,将永远返回失败,无效的操作
+ This robot does not support this method operation, will always return failed, invalid operation +
+ 指定的地址信息,有些机器人可能不支持 + 字符串的数据信息 + 是否成功的写入 +
+ + + 读取机器人的详细信息
+ Read the details of the robot +
+ 结果数据信息 +
+ + + + + + + + + + + + + + + + + + + + + 埃斯顿的数据类对象 + + + + + 实例化一个默认的对象 + + + + + 使用指定的原始字节数据来实例化埃斯顿机器人对象 + + 原始字节数组 + 字节转换 + + + + 获取或设置当前的手动操作模式 + + + + + 获取或设置当前的自动操作模式 + + + + + 获取或设置当前的远程操作模式 + + + + + 获取或设置使能状态 + + + + + 获取或设置运行状态 + + + + + 获取或设置错误状态 + + + + + 获取或设置程序运行状态 + + + + + 机器人正在动作 + + + + + 获取或设置当前加载的工程名 + + + + + SimDout, 共计64位长度 + + + + + 机器人的执行命令状态,16长度的bool数组 + + + + + 用户的AO,32个长度 + + + + + 全局的速度值 + + + + + SimDI, 共计64个bit + + + + + 用户的AI,32个长度 + + + + + 读写标志位 + + + + + 从原始的字节数据里加载 + + 原始字节数据 + 字节转换的类 + + + + 一个埃斯顿的机器人的通信类,底层使用的是ModbusTCP协议,支持读取简单机器人数据,并且支持对机器人进行一些操作。
+ A communication class of Estun's robot, the bottom layer uses the ModbusTCP protocol, supports reading simple robot data, and supports some operations on the robot. +
+
+ + + 实例化一个Modbus-Tcp协议的客户端对象
+ Instantiate a client object of the Modbus-Tcp protocol +
+
+ + + 指定服务器地址,端口号,客户端自己的站号来初始化
+ Specify the server address, port number, and client's own station number to initialize +
+ 服务器的Ip地址 + 服务器的端口号 + 客户端自身的站号 +
+ + + 读取埃斯顿的机器人的数据 + + 机器人数据 + + + + 机器人程序启动 + + 是否启动成功 + + + + 机器人程序停止 + + 是否停止成功 + + + + 机器人的错误进行复位 + + 是否重置了错误 + + + + 机器人重新装载程序名 + + 程序的名称 + 是否装载成功 + + + + 机器人卸载程序名 + + 是否卸载成功 + + + + 机器人设置全局速度值 + + 全局速度值 + 是否设置成功 + + + + 重置机器人的命令状态 + + 是否操作成功 + + + + + + + Fanuc机器人的报警对象 + + + + + AlarmID + + + + + AlarmNumber + + + + + CauseAlarmID + + + + + CauseAlarmNumber + + + + + Severity + + + + + Time + + + + + AlarmMessage + + + + + CauseAlarmMessage + + + + + SeverityMessage + + + + + 从字节数据加载真实的信息 + + 字节变换 + 原始的字节内容 + 索引 + 编码 + + + + + + + 从数据内容创建报警信息 + + 字节变换 + 原始的字节内容 + 索引 + 编码 + 报警信息 + + + + Fanuc机器人的所有的数据信息 + + + + + 从原始的数据内容加载数据 + + 原始的内容 + 编码信息 + + + + + + + 从字节数组解析出fanuc的数据信息 + + 原始的字节数组 + 字符串数据解析的编码信息 + fanuc数据 + + + + Fanuc的辅助方法信息 + + + + + Q区数据 + + + + + I区数据 + + + + + AQ区数据 + + + + + AI区数据 + + + + + M区数据 + + + + + D区数据 + + + + + 命令数据 + + + + + 从FANUC机器人地址进行解析数据信息,地址为D,I,Q,M,AI,AQ区
+ Parse data information from FANUC robot address, the address is D, I, Q, M, AI, AQ area +
+ fanuc机器人的地址信息 + 是否使用位操作 + 解析结果 +
+ + + 构建读取数据的报文内容 + + 数据类别 + 偏移地址 + 长度 + 报文内容 + + + + 构建读取返回的数据信息 + + 数据 + 结果 + + + + 构建写入的数据报文,需要指定相关的参数信息 + + 数据类别 + 偏移地址 + 原始数据内容 + 写入的数据长度 + 报文内容 + + + + 当前地址不允许位操作 + + + + + 当前地址不允许字操作 + + + + + 获取所有的命令信息
+ Get all command information +
+ 命令数组 +
+ + + Fanuc机器人的PC Interface实现,在R-30iB mate plus型号上测试通过,支持读写任意的数据,写入操作务必谨慎调用,写入数据不当造成生命财产损失,作者概不负责。读写任意的地址见api文档信息
+ The Fanuc robot's PC Interface implementation has been tested on R-30iB mate plus models. It supports reading and writing arbitrary data. The writing operation must be called carefully. + Improper writing of data will cause loss of life and property. The author is not responsible. Read and write arbitrary addresses see api documentation information +
+ + 注意:如果再读取机器人的数据时,发生了GB2312编码获取的异常的时候(通常是基于.net core的项目会报错),使用如下的方法进行解决
+ 1. 从nuget安装组件 System.Text.Encoding.CodePages
+ 2. 刚进入系统的时候,调用一行代码: System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
+ Note: If you read the data of the robot again, when an exception occurs in the GB2312 code acquisition (usually a project based on .net core will report an error), use the following method to solve it.
+ 1. Install the component System.Text.Encoding.CodePages from nuget
+ 2. When you first enter the system, call a line of code: System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
+
+ + 我们看看实际的地址支持的情况,如果使用绝对地址进行访问的话,支持的地址格式如下: + + + 地址名称 + 地址代号 + 示例 + 地址进制 + 字操作 + 位操作 + 备注 + + + 数据寄存器 + D + D100,D200 + 10 + + × + + + + R寄存器 + R + R1-R10 + 10 + + × + R1-R5为int类型,R6-R10为float类型,本质还是数据寄存器 + + + 输入寄存器 + AI + AI100,AI200 + 10 + + × + + + + 输出寄存器 + AQ + AQ100,Q200 + 10 + + × + + + + 输入继电器 + I + I100,I200 + 10 + × + + + + + 输出继电器 + Q + Q100,Q200 + 10 + × + + + + + 中间继电器 + M + M100,M200 + 10 + × + + + + + 我们先来看看简单的情况 + + 读取fanuc部分数据 + + 最后是比较高级的任意数据读写 + + +
+ + + 实例化一个默认的对象
+ Instantiate a default object +
+
+ + + 指定ip及端口来实例化一个默认的对象,端口默认60008
+ Specify the IP and port to instantiate a default object, the port defaults to 60008 +
+ ip地址 + 端口号 +
+ + + + + + 获取或设置当前客户端的ID信息,默认为1024
+ Gets or sets the ID information of the current client. The default is 1024. +
+
+ + + 获取或设置缓存的Fanuc数据的有效时间,对方法有效,默认为100,单位毫秒。也即是在100ms内频繁读取机器人的属性数据的时候,优先读取缓存值,提高读取效率。
+ Gets or sets the valid time of the cached Fanuc data. It is valid for the method. The default is 100, in milliseconds. + That is, when the attribute data of the robot is frequently read within 100ms, the cache value is preferentially read to improve the reading efficiency. +
+
+ + + 获取或设置解析当前的字符串数据时使用的编码信息,默认使用 Encoding.Default 编码。
+ Gets or sets the encoding information used when parsing the current string data, using Encoding.Default encoding by default. +
+
+ + + + + + + + + + + + + + + + + + + + + 按照字为单位批量读取设备的原始数据,需要指定地址及长度,地址示例:D1,AI1,AQ1,共计3个区的数据,注意地址的起始为1
+ Read the raw data of the device in batches in units of words. You need to specify the address and length. Example addresses: D1, AI1, AQ1, a total of 3 areas of data. Note that the start of the address is 1. +
+ + 地址也支持直接使用 GO100, GI100 + + 起始地址,地址示例:D1,AI1,AQ1,共计3个区的数据,注意起始的起始为1 + 读取的长度,字为单位 + 返回的数据信息结果 +
+ + + 写入原始的byte数组数据到指定的地址,返回是否写入成功,地址示例:D1,AI1,AQ1,共计3个区的数据,注意起始的起始为1
+ Write the original byte array data to the specified address, and return whether the write was successful. Example addresses: D1, AI1, AQ1, a total of 3 areas of data. Note that the start of the address is 1. +
+ + 地址也支持直接使用 GO100, GI100 + + 起始地址,地址示例:D1,AI1,AQ1,共计3个区的数据,注意起始的起始为1 + 写入值 + 带有成功标识的结果类对象 +
+ + + 按照位为单位批量读取设备的原始数据,需要指定地址及长度,地址示例:M1,I1,Q1,共计3个区的数据,注意地址的起始为1
+ Read the raw data of the device in batches in units of boolean. You need to specify the address and length. Example addresses: M1,I1,Q1, a total of 3 areas of data. Note that the start of the address is 1. +
+ + 地址也支持直接使用 SDO100, SDI100, RDI100, RDO100, UI100, UO100, SI100, SO100 + + 起始地址,地址示例:M1,I1,Q1,共计3个区的数据,注意地址的起始为1 + 读取的长度,位为单位 + 返回的数据信息结果 +
+ + + 批量写入数组数据,返回是否写入成功,需要指定起始地址,地址示例:M1,I1,Q1,共计3个区的数据,注意地址的起始为1
+ Write array data in batches. If the write success is returned, you need to specify the starting address. Example address: M1, I1, Q1, a total of 3 areas of data. Note that the starting address is 1. +
+ + 地址也支持直接使用 SDO100, SDI100, RDI100, RDO100, UI100, UO100, SI100, SO100 + + 起始地址,地址示例:M1,I1,Q1,共计3个区的数据,注意地址的起始为1 + 等待写入的数据值 + 是否写入成功 +
+ + + + + + + + + + + + + + + 按照字为单位批量读取设备的原始数据,需要指定数据块地址,偏移地址及长度,主要针对08, 10, 12的数据块,注意地址的起始为1
+ Read the raw data of the device in batches in units of words. You need to specify the data block address, offset address, and length. It is mainly for data blocks of 08, 10, and 12. Note that the start of the address is 1. +
+ 数据块信息 + 偏移地址 + 读取的长度,字为单位 +
+ + + 写入原始的byte数组数据到指定的地址,返回是否写入成功,,需要指定数据块地址,偏移地址,主要针对08, 10, 12的数据块,注意起始的起始为1
+ Write the original byte array data to the specified address, and return whether the writing is successful. You need to specify the data block address and offset address, + which are mainly for the data blocks of 08, 10, and 12. Note that the start of the start is 1. +
+ 数据块信息 + 偏移地址 + 原始数据内容 +
+ + + 按照位为单位批量读取设备的原始数据,需要指定数据块地址,偏移地址及长度,主要针对70, 72, 76的数据块,注意地址的起始为1
+
+ 数据块信息 + 偏移地址 + 读取的长度,字为单位 +
+ + + 批量写入数组数据,返回是否写入成功,需要指定数据块地址,偏移地址,主要针对70, 72, 76的数据块,注意起始的起始为1 + + 数据块信息 + 偏移地址 + 原始的数据内容 + 是否写入成功 + + + + + + + + + + + + + + + + 读取机器人的详细信息,返回解析后的数据类型
+ Read the details of the robot and return the resolved data type +
+ 结果数据信息 +
+ + + 读取机器人的SDO信息
+ Read the SDO information of the robot +
+ 偏移地址 + 读取的长度 + 结果数据 +
+ + + 写入机器人的SDO信息
+ Write the SDO information of the robot +
+ 偏移地址 + 数据值 + 是否写入成功 +
+ + + 读取机器人的SDI信息
+ Read the SDI information of the robot +
+ 偏移地址 + 读取长度 + 结果内容 +
+ + + 写入机器人的SDI信息
+ Write the SDI information of the robot +
+ 偏移地址 + 数据值 + 是否写入成功 +
+ + + 读取机器人的RDI信息 + + 偏移地址 + 读取长度 + 结果信息 + + + + 写入机器人的RDI信息 + + 偏移地址 + 数据值 + 是否写入成功 + + + + 读取机器人的UI信息 + + 偏移地址 + 读取长度 + 结果信息 + + + + 读取机器人的UO信息 + + 偏移地址 + 读取长度 + 结果信息 + + + + 写入机器人的UO信息 + + 偏移地址 + 数据值 + 是否写入成功 + + + + 读取机器人的SI信息 + + 偏移地址 + 读取长度 + 结果信息 + + + + 读取机器人的SO信息 + + 偏移地址 + 读取长度 + 结果信息 + + + + 写入机器人的SO信息 + + 偏移地址 + 数据值 + 是否写入成功 + + + + 读取机器人的GI信息 + + 偏移地址 + 数据长度 + 结果信息 + + + + 写入机器人的GI信息 + + 偏移地址 + 数据值 + 是否写入成功 + + + + 读取机器人的GO信息 + + 偏移地址 + 读取长度 + 结果信息 + + + + 写入机器人的GO信息 + + 偏移地址 + 数据值 + 写入结果 + + + + 读取机器人的PMCR2信息 + + 偏移地址 + 读取长度 + 结果信息 + + + + 写入机器人的PMCR2信息 + + 偏移信息 + 数据值 + 是否写入成功 + + + + 读取机器人的RDO信息 + + 偏移地址 + 读取长度 + 结果信息 + + + + 写入机器人的RDO信息 + + 偏移地址 + 数据值 + 是否写入成功 + + + + 写入机器人的Rxyzwpr信息,谨慎调用, + + 偏移地址 + 姿态信息 + 设置信息 + 参考系 + 工具 + 是否写入成功 + + + + 写入机器人的Joint信息 + + 偏移地址 + 关节坐标 + 参考系 + 工具 + 是否写入成功 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 机器人的姿态数据 + + + + + Xyzwpr + + + + + Config + + + + + Joint + + + + + UF + + + + + UT + + + + + ValidC + + + + + ValidJ + + + + + 从原始数据解析出当前的姿态数据 + + 数据解析对象 + 原始的内容 + 索引位置 + + + + + + + 从原始的字节数据创建一个新的姿态数据 + + 数据解析对象 + 原始的内容 + 索引位置 + 姿态数据 + + + + 将short类型的config数组转换成string数组类型的config + + short数组的值 + string数组的值 + + + + 虚拟的FANUC机器人的服务器对象,支持I,Q,M,D,AI,AQ数据区的数据读写,其中D区是机器人数据存放的区域,相关的数据需要去机器人区读取。详细参见api文档信息。
+ The server object of the virtual FANUC robot supports data reading and writing in I, Q, M, D, AI, and AQ data areas, + where D area is the area where the robot data is stored, and related data needs to be read in the robot area. See the api documentation for details. +
+ + 本虚拟服务器需要商业授权,否则只能运行24小时。 + + +
+ + + 实例化一个默认的对象信息,并初始化机器人的相关数据
+ Instantiate a default object information and initialize the relevant data of the robot +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Fanuc机器人的任务类 + + + + + ProgramName + + + + + LineNumber + + + + + State + + + + + ParentProgramName + + + + + 从原始的数据对象加载数据信息 + + 字节变换 + 原始的字节数据 + 索引信息 + 编码 + + + + + + + 从原始的数据信息初始化一个任务对象 + + 字节变换 + 原始的字节数据 + 索引信息 + 编码 + 任务对象 + + + + Hyundai的数据类对象 + + + + + 实例化一个默认的对象 + + + + + 通过缓存对象实例化一个 + + + + + + 命令码,从控制器发数据到PC和PC到控制器,两者的命令不一样 + + + + + 虚标记 + + + + + 状态码 + + + + + 标记数据,从PLC发送给机器人的数据,原封不动的返回 + + + + + 虚标记 + + + + + 关节坐标数据,包含X,Y,Z,W,P,R,三个位置数据,三个角度数据。 + + + + + 从字节数组的指定索引开始加载现在机器人的数据 + + 原始的字节数据 + 起始的索引信息 + + + + 将现代机器人的数据转换为字节数组 + + 字节数组 + + + + + + + 现代机器人的UDP通讯类,注意本类是服务器,需要等待机器人先配置好ip地址及端口,然后连接到本服务器才能正确的进行操作。详细参见api文档注释
+ The UDP communication class of modern robots. Note that this class is a server. You need to wait for the robot to configure the IP address and port first, + and then connect to this server to operate correctly. See api documentation for details +
+ + 为使用联机跟踪功能,通过JOB文件的 OnLTrack 命令激活本功能后对通信及位置增量命令 Filter 进行设置,必要时以 LIMIT 命令设置机器人的动作领域,速度限制项。 + 最后采用 OnLTrack 命令关闭联机跟踪功能以退出本功能。
+ 功能开始,通信及 Filter 设置,程序示例: OnLTrack ON,IP=192.168.1.254,PORT=7127,CRD=1,Bypass,Fn=10 +
+
+ + + 实例化一个默认的对象
+ Instantiate a default object +
+
+ + + + + + 将指定的增量写入机器人,需要指定6个参数,位置和角度信息,其中位置单位为mm,角度单位为°
+ To write the specified increment to the robot, you need to specify 6 parameters, + position and angle information, where the position unit is mm and the angle unit is ° +
+ X轴增量信息,单位毫米 + Y轴增量信息,单位毫米 + Z轴增量信息,单位毫米 + X轴角度增量信息,单位角度 + Y轴角度增量信息,单位角度 + Z轴角度增量信息,单位角度 + 是否写入机器人成功 +
+ + + 将指定的增量写入机器人,需要指定6个参数,位置和角度信息,其中位置单位为mm,角度单位为°
+ To write the specified increment to the robot, you need to specify 6 parameters, position and angle information, where the position unit is mm and the angle unit is ° +
+ 增量的数组信息 + 是否写入机器人成功 +
+ + + 将指定的命令写入机器人,该命令是完全自定义的,需要遵循机器人的通讯协议,在写入之前,需要调用 方法
+ Write the specified command to the robot. The command is completely customized and needs to follow the robot's communication protocol. + Before writing, you need to call the +
+ 机器人数据 + 是否写入成功 +
+ + + 机器人在X轴上移动一小段距离,单位毫米
+ The robot moves a short distance on the X axis, in millimeters +
+ 移动距离,单位毫米 + 是否写入成功 +
+ + + 机器人在Y轴上移动一小段距离,单位毫米
+ The robot moves a short distance on the Y axis, in millimeters +
+ 移动距离,单位毫米 + 是否写入成功 +
+ + + 机器人在Z轴上移动一小段距离,单位毫米
+ The robot moves a short distance on the Z axis, in millimeters +
+ 移动距离,单位毫米 + 是否写入成功 +
+ + + 机器人在X轴方向上旋转指定角度,单位角度
+ The robot rotates the specified angle in the X axis direction, the unit angle +
+ 旋转角度,单位角度 + 是否写入成功 +
+ + + 机器人在Y轴方向上旋转指定角度,单位角度
+ The robot rotates the specified angle in the Y axis direction, the unit angle +
+ 旋转角度,单位角度 + 是否写入成功 +
+ + + 机器人在Z轴方向上旋转指定角度,单位角度
+ The robot rotates the specified angle in the Z axis direction, the unit angle +
+ 旋转角度,单位角度 + 是否写入成功 +
+ + + 收到机器人消息的事件委托 + + 机器人消息 + + + + 当接收到机器人数据的时候触发的事件 + + + + + + + + Kuka机器人的数据交互类,通讯支持的条件为KUKA 的 KRC4 控制器中运行KUKAVARPROXY 这个第三方软件,端口通常为7000
+ The data interaction class of Kuka robot is supported by the third-party software KUKAVARPROXY running in the KRC4 controller of Kuka. The port is usually 7000 +
+ + 非常感谢 昆山-LT 网友的测试和意见反馈。
+ 其中KUKAVARPROXY 这个第三方软件在来源地址: + https://github.com/ImtsSrl/KUKAVARPROXY
+
+
+ + + 实例化一个默认的对象
+ Instantiate a default object +
+
+ + + 实例化一个默认的Kuka机器人对象,并指定IP地址和端口号,端口号通常为7000
+ Instantiate a default Kuka robot object and specify the IP address and port number, usually 7000 +
+ Ip地址 + 端口号 +
+ + + + + + 读取Kuka机器人的数据内容,根据输入的变量名称来读取
+ Read the data content of the Kuka robot according to the input variable name +
+ 地址数据 + 带有成功标识的byte[]数组 +
+ + + 读取Kuka机器人的所有的数据信息,返回字符串信息,解码方式为ANSI,需要指定变量名称
+ Read all the data information of the Kuka robot, return the string information, decode by ANSI, need to specify the variable name +
+ 地址信息 + 带有成功标识的字符串数据 +
+ + + 根据Kuka机器人的变量名称,写入原始的数据内容
+ Write the original data content according to the variable name of the Kuka robot +
+ 变量名称 + 原始的字节数据信息 + 是否成功的写入 +
+ + + 根据Kuka机器人的变量名称,写入ANSI编码的字符串数据信息
+ Writes ansi-encoded string data information based on the variable name of the Kuka robot +
+ 变量名称 + ANSI编码的字符串 + 是否成功的写入 +
+ + + + + + + + + + + + + + + 将核心的指令打包成一个可用于发送的消息对象
+ Package the core instructions into a message object that can be sent +
+ 核心命令 + 最终实现的可以发送的机器人的字节数据 +
+ + + + + + Kuka机器人的数据交互类,通讯支持的条件为KUKA 的 TCP通讯 + + + + + 实例化一个默认的对象
+ Instantiate a default object +
+
+ + + 实例化一个默认的Kuka机器人对象,并指定IP地址和端口号,端口号通常为9999
+ Instantiate a default Kuka robot object and specify the IP address and port number, usually 9999 +
+ Ip地址 + 端口号 +
+ + + + + + + + + 读取Kuka机器人的数据内容,根据输入的变量名称来读取
+ Read the data content of the Kuka robot according to the input variable name +
+ 地址数据 + 带有成功标识的byte[]数组 +
+ + + 读取Kuka机器人的所有的数据信息,返回字符串信息,解码方式为UTF8,需要指定变量名称
+ Read all the data information of the Kuka robot, return the string information, decode by ANSI, need to specify the variable name +
+ 地址信息 + 带有成功标识的字符串数据 +
+ + + 根据Kuka机器人的变量名称,写入原始的数据内容
+ Write the original data content according to the variable name of the Kuka robot +
+ 变量名称 + 原始的字节数据信息 + 是否成功的写入 +
+ + + 根据Kuka机器人的变量名称,写入UTF8编码的字符串数据信息
+ Writes ansi-encoded string data information based on the variable name of the Kuka robot +
+ 变量名称 + ANSI编码的字符串 + 是否成功的写入 +
+ + + 根据Kuka机器人的变量名称,写入多个UTF8编码的字符串数据信息
+ Write multiple UTF8 encoded string data information according to the variable name of the Kuka robot +
+ 变量名称 + ANSI编码的字符串 + 是否成功的写入 +
+ + + 启动机器人的指定的程序
+ Start the specified program of the robot +
+ 程序的名字 + 是否启动成功 +
+ + + 复位当前的程序
+ Reset current program +
+ 复位结果 +
+ + + 停止当前的程序
+ Stop current program +
+ 复位结果 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 构建读取变量的报文命令 + + 地址信息 + 报文内容 + + + + 构建读取变量的报文命令 + + 地址信息 + 报文内容 + + + + 构建写入变量的报文命令 + + 地址信息 + 数据信息 + 字符串信息 + + + + 构建写入变量的报文命令 + + 地址信息 + 数据信息 + 字符串信息 + + + + 雅马哈机器人的数据访问类 + + + + + 实例化一个默认的对象 + + + + + 指定IP地址和端口来实例化一个对象 + + IP地址 + 端口号 + + + + + + + 发送命令行到socket, 并从机器人读取指定的命令行 + + 等待发送的数据 + 接收的行数 + 结果的结果数据内容 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 读取指定的命令的方法,需要指定命令,和接收命令的行数信息
+ The method of reading the specified command requires the specified command and the line number information of the received command +
+ 命令 + 接收的行数信息 + 接收的命令 +
+ + + 指定程序复位信息,对所有的程序进行复位。当重新启动了程序时,从主程序或者任务 1 中最后执行的程序开头开始执行。
+ Specify the program reset information to reset all programs. When the program is restarted, + execution starts from the beginning of the main program or the last executed program in task 1. +
+ 执行结果是否成功 +
+ + + 执行程序运行。执行所有的 RUN 状态程序。
+ Execute the program to run. Execute all RUN state programs. +
+ 执行结果是否成功 +
+ + + 按照优先顺序 p 将指定的程序登录到任务 n 中。已登录程序变为 STOP 状态。
+ Logs the specified program into task n in order of p. The logged-in program changes to the STOP state. +
+ 程序名称 + 任务编号 + 是否加载成功 +
+ + + 执行程序停止。执行所有的 STOP 状态程序。
+ The execution program stops. Execute all STOP state programs. +
+ 执行结果是否成功 +
+ + + 对<机器人编号>指定机器人的指定轴进行手动移动(点动)。<机器人编号>可以省略。当进行省略时,机器人 1 被指定。 + + 机器人编号 + 轴ID信息 + 是否操作成功 + + + + 获取马达电源状态,返回的0:马达电源关闭; 1:马达电源开启; 2:马达电源开启+所有机器人伺服开启
+ Get the motor power status, return 0: motor power off; 1: motor power on; 2: motor power on + all robot servos on +
+ 返回的0:马达电源关闭; 1:马达电源开启; 2:马达电源开启+所有机器人伺服开启 +
+ + + 读取模式状态
+ Read mode status +
+ 模式的状态信息 +
+ + + 读取关节的基本数据信息
+ Read the basic data information of the joint +
+ 关节信息 +
+ + + 读取紧急停止状态,0 :正常状态、1 :紧急停止状态
+ Read emergency stop state, 0: normal state, 1: emergency stop state +
+ 0 :正常状态、1 :紧急停止状态 +
+ + + 安川机器人的静态辅助方法 + + + + + 根据错误信息获取安川机器人的错误信息文本
+ Obtain the error message text of the Yaskawa robot according to the error message +
+ 错误号 + 错误文本信息 +
+ + + 当机器人返回ERROR的错误指令后,检测消息里面是否有相关的错误码数据,如果存在,就解析出错误对应的文本
+ When the robot returns the error instruction of ERROR, it checks whether there is related error code data in the message, + and if it exists, it parses out the text corresponding to the error +
+ 返回的完整的报文 + 带有错误文本的数据信息 +
+ + + 安川机器人的高速以太网的辅助方法 + + + + + 构建完整的读取指令 + + 处理分区,1:机器人控制 2:文件控制 + 请求ID, 客户端每次命令输出的时请增量 + 命令编号,相当于CIP通信的CLASS + 数据队列编号,相当于CIP通信的Instance + 单元编号,相当于CIP通信协议的Attribute + 处理请求,定义数据的请方法 + 数据部分的内容 + 构建结果 + + + + 检查当前的机器人反馈的数据是否正确 + + 从机器人反馈的数据 + 是否检查正确 + + + + 根据状态信息及附加状态信息来获取错误的文本描述信息 + + 状态信息 + 附加状态信息 + 错误的文本描述信息 + + + + 安川机器人的Ethernet 服务器功能对应的客户端通讯类
+ Yaskawa robot's Ethernet server features a communication class +
+ + 要想成功的通信,有两个至关重要的前提。
+ 1. 开启以太网服务器,[系统]-[设定]-[选项功能]-[网络功能设定]启用网络功能。
+ 2. 开启远程的命令,[输入输出]-[模拟输入]-[远程命令选择] 激活远程命令 +
+
+ + + 指定机器人的ip地址及端口号来实例化对象
+ Specify the robot's IP address and port number to instantiate the object +
+ Ip地址 + 端口号 +
+ + + 获取或设置当前的机器人类型,默认为 + Get or set the current robot type, the default is + + + + + + + + + + + + + + + + + + + + + + + + + + + + + before read data , the connection should be Initialized + + connected socket + whether is the Initialization is success. + + + + before read data , the connection should be Initialized + + connected socket + whether is the Initialization is success. + + + + + + + Read string value from socket + + connected socket + string value + received string value with is successfully + + + + 根据指令来读取设备的信息,如果命令数据为空,则传入null即可,注意,所有的命令不带换行符
+ Read the device information according to the instructions. If the command data is empty, pass in null. Note that all commands do not have a newline character +
+ + 此处举几个例子
+ "RALARM", NULL 错误报警代码读取。
+ "RPOSJ", NULL 关节坐标系的坐标位置读取。
+ "RJSEQ", NULL 读取当前的程序名,行编号,步编号。
+ "SAVEV", "7,000" 读取变量数据。字符串变量 +
+ 命令的内容 + 命令数据内容 + 最终的结果内容,需要对IsSuccess进行验证 +
+ + + + + + + + + 读取机器人的报警信息
+ Read the alarm information of the robot +
+ 原始的报警信息 +
+ + + 关节坐标系的坐标位置读取。
+ Read the coordinate data information of the robot +
+ 原始的报警信息 +
+ + + 指定坐标系的当前值读取。并且可以指定外部轴的有无。
+ The current value of the specified coordinate system is read. And you can specify the presence or absence of an external axis. +
+ 指定读取坐标 0:基座坐标,1:机器人坐标,2-65分别表示用户坐标1-64 + 外部轴的有/无 + 坐标系当前值 +
+ + + 模式状态,循环状态,动作状态,报警错误状态,伺服状态的读取。
+ Reading of mode status, cycle status, action status, alarm error status, and servo status. +
+ + [0]: 单步 + [1]: 1循环 + [2]: 自动连续 + [3]: 运行中 + [4]: 运转中 + [5]: 示教 + [6]: 在线 + [7]: 命令模式 + [9]: 示教编程器HOLD中 + [10]: 外部HOLD中 + [11]: 命令HOLD中 + [12]: 发生警报 + [13]: 发生错误 + [14]: 伺服ON + + 状态信息 +
+ + + 读取当前的程序名,行编号,步编号。
+ Read the current program name, line number, and step number. +
+ 读取结果 +
+ + + 读取指定用户的坐标数据。
+ Read the coordinate data of the specified user. +
+ 用户坐标编号,1-64 + 坐标值 +
+ + + 读取机器人的字节型变量的数据,需要传入变量的编号
+ To read the data of the byte variable of the robot, the number of the variable needs to be passed in +
+ 变量的编号 + 包含是否成功的结果数据 +
+ + + 读取机器人的整型变量的数据,需要传入变量的编号
+ To read the data of the integer variable of the robot, the number of the variable needs to be passed in +
+ 变量的编号 + 包含是否成功的结果数据 +
+ + + 读取机器人的双精度整型变量的数据,需要传入变量的编号
+ To read the data of the double integer variable of the robot, the number of the variable needs to be passed in +
+ 变量的编号 + 包含是否成功的结果数据 +
+ + + 读取机器人的实数变量的数据,需要传入变量的编号
+ To read the data of the real variable of the robot, the number of the variable needs to be passed in +
+ 变量的编号 + 包含是否成功的结果数据 +
+ + + 读取机器人的字符串变量的数据,需要传入变量的编号
+ To read the data of the string variable of the robot, the number of the variable needs to be passed in +
+ 变量的编号 + 包含是否成功的结果数据 +
+ + + 进行HOLD 的 ON/OFF 操作,状态参数 False: OFF操作,True: ON操作
+ Perform HOLD ON operation, False: OFF,True: ON +
+ 状态参数 False: OFF操作,True: ON操作 + 是否成功的HOLD操作 +
+ + + 对机械手的报警进行复位
+ Reset the alarm of the manipulator +
+ + 传输报警仅可在示教编程器上进行复位。 + + 是否复位成功 +
+ + + 进行错误取消
+ Make an error cancellation +
+ 是否取消成功 +
+ + + 选择模式。模式编号为1:示教模式,2:再现模式
+ Choose a mode. The mode number is 1: teaching mode, 2: reproduction mode +
+ 模式编号为1:示教模式,2:再现模式 + + MODE 命令,是在「操作条件」 画面中获得外部模式切换的许可后可以使用。 + + 模式是否选择成功 +
+ + + 选择循环。循环编号 1:步骤,2:1循环,3:连续自动
+ Choose loop. Cycle number 1: step, 2:1 cycle, 3: continuous automatic +
+ 循环编号 1:步骤,2:1循环,3:连续自动 + 循环是否选择成功 +
+ + + 进行伺服电源的ON/OFF操作,状态参数 False: OFF,True: ON
+ Carry out the ON/OFF operation of the servo power, the status parameter False: OFF,True: ON +
+ 状态参数 False: OFF,True: ON + + 通过此命令伺服ON的时候,请连接机器人专用端子台( MTX) 的外部伺服ON( EXSVON)信号的29和 30 。 + 是否伺服电源是否成功 +
+ + + 设定示教编程器和 I/O的操作信号的联锁。 状态参数 False: OFF,True: ON
+ Set the interlock between the programming pendant and the operation signal of I/O. Status parameter False: OFF,True: ON +
+ 状态参数 False: OFF,True: ON + + 联锁为ON时,仅可执行以下操作。 + + 示教编程器的非常停止 + I /O 的模式切换, 外部启动, 外部伺服ON,循环切换, I/O 禁止、 PP/PANEL 禁止、 主程序调出以外的输入信号 + + 示教编程器在编辑中或者通过其他的功能访问文件时,不能使用HLOCK. + + 是否设定成功 +
+ + + 接受消息数据时, 在YRC1000的示教编程器的远程画面下显示消息若。若不是远程画面时,强制切换到远程画面。显示MDSP命令的消息。
+ When receiving message data, a message is displayed on the remote screen of the YRC1000 programming pendant. + If it is not a remote screen, it is forced to switch to the remote screen. Display the message of the MDSP command. +
+ 显示信息(最大 30byte 字符串) + 是否显示成功 +
+ + + 开始程序。操作时指定程序名时,此程序能附带对应主程序,则从该程序的开头开始执行。如果没有指定,则从前行开始执行
+ Start the program. When the program name is specified during operation, the program can be accompanied by the corresponding main program, + and the execution starts from the beginning of the program. If not specified, execute from the previous line +
+ 开始动作程序名称,可以省略 + 是否启动成功 +
+ + + 删除指定的程序。指定「*」 时, 删除当前登录的所有程序。指定「 删除程序名称」 时,仅删除指定的程序。
+ Delete the specified program. When "*" is specified, all currently registered programs will be deleted. + When "delete program name" is specified, only the specified program will be deleted. +
+ 删除的程序名称,如果设置为「*」时,删除当前登录的所有程序。 + 是否删除成功 +
+ + + 指定的程序设定为主程序。设定主程序的同时执行程序也被设定。
+ The specified program is set as the main program. The execution program is also set when the main program is set. +
+ 设定的程序名称 + 是否设定成功 +
+ + + 设定执行程序的名称和行编号。
+ Set the name and line number of the executed program. +
+ 设定程序名称 + 设定行编号( 0 ~ 9999) + 是否设定成功 +
+ + + 向指定的坐标系位置进行关节动作。其中没有外部轴的系统, 7-12外部轴的值设定为「0」
+ Perform joint motions to the specified coordinate system position. + where there is no external axis system, the value of 7-12 external axis is set to "0" +
+ 机器的的数据信息 + + 其中形态数据由6个bool数组组成,每个bool含义参考参数说明,0表示 False,1表示 True + + 是否动作成功 +
+ + + 读取I/O 信号。 I/O 数据是每8个点输出,所以读出接点数是8的倍数。
+ Read I/O signal. I/O data is output every 8 points, so the number of read contacts is a multiple of 8. +
+ 读出开始点编号 + 读出的接点数 + 读取的结果点位信息 +
+ + + 写入I/O信号状态,写入接点数请指定8的倍数。IO 信号的网络写入仅可是( #27010 ~ #29567)。
+ To write I/O signal status, please specify a multiple of 8 for the number of write contacts. + The network write of IO signal is only available (#27010 to #29567). +
+ 写入开始接点编号 + 写入的bool值,写入接点数请指定8的倍数。 + 是否写入成功 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 安川的报警信息 + + + + + 实例化一个默认的对象 + + + + + 使用原始数据来实例化一个报警的对象 + + 字节的变换顺序 + 原始字节数据 + 字符串的编码信息 + + + + 报警代码 + + + + + 报警发生的时间 + + + + + 报警文字列名称 + + + + + + + + 安川机器人的通信类,基于高速以太网的通信,基于UDP协议实现,默认端口10040,支持读写一些数据地址 + + + + + 实例化一个默认的对象 + + + + + 使用指定的IP地址和端口号信息来实例化一个对象 + + IP地址 + 端口号信息 + + + + 使用自定义的命令来读取机器人指定的数据信息,每个命令返回的数据格式互不相同,需要根据手册来自定义解析的。
+ Use custom commands to read the data information specified by the robot. + The data format returned by each command is different from each other, + and you need to customize the analysis according to the manual. +
+ 命令编号,相当于CIP 通信协议的Class + 数据队列编号,相当于CIP 通信协议的Instance + 单元编号,相当于CIP 通信协议的Attribute + 处理(请求), 定义数据请求方法。 + 附加数据信息 + 从机器人返回的设备数据,如果是写入状态,则 Content 为 NULL +
+ + + 读取机器人的最新的报警列表信息,最多为四个报警 + + 报警列表信息 + + + + 读取机器人的指定的报警信息,需要指定报警类型,及报警数量,其中length为1-100之间。 + + 报警类型,1-100:重故障; 1001-1100: 轻故障; 2001-2100: 用户报警(系统); 3001-3100: 用户报警(用户); 4001-4100:在线报警 + 读取的报警的个数 + 报警列表信息 + + + + + + + 读取当前的机器人的程序名称,行编号,步骤编号,速度超出值。需要指定当前的任务号,默认为1,表示主任务
+ Read the current robot's program name, line number, step number, and speed exceeding value. + Need to specify the current task number, the default is 1, which means the main task +
+ 任务标识,1:主任务; 2-16分别表示子任务1-子任务15 + 读取的任务的结果信息 +
+ + + 读取机器人的姿态信息,包括X,Y,Z,Rx,Ry,Rz,如果是七轴机器人,还包括Re + + 姿态信息 + + + + 读取力矩数据功能 + + 力矩信息 + + + + + + + 写入IO的数据,只可写入网络输入信号,也即地址是 2701~2956 + + 网络输入信号,也即地址是 2701~2956 + 表示8个bool的字节数据 + 是否写入成功 + + + + 读取IO数据,需要指定IO的地址。 + + + io地址如下:
+ 1~512: 机器人通用输入命令;1001~1512:机器人通用输出命令;2001~2512:外部输入信号;2701~2956:网络输入信号; + 3001~3512:外部输出信号;3701~3956:网络输出信号;4001~4256:机器人专用输入信号;5001~5512:机器人专用输出信号; + 6001~6064:接口面板输入信号;7001~7999:辅助继电器信号;8001~8512:机器人控制状态信号;8701~8720:模拟输入信号; +
+ 信号地址,详细参见注释 + 读取的数据长度信息 + bool值 +
+ + + 写入多个IO数据的命令,写入的字节长度需要是2的倍数 + + 网络输入信号,也即地址是 2701~2956 + 连续的字数据 + 是否写入成功 + + + + 读取寄存器的数据,地址范围 0 ~ 999 + + 地址索引 + 读取结果数据 + + + + 将数据写入到寄存器,支持写入的地址范围为 0 ~ 599 + + 地址索引 + 等待写入的值 + 是否写入成功 + + + + 批量读取多个寄存器的数据,地址范围 0 ~ 999,指定读取的数据长度,最大不超过237 个 + + 地址索引 + 读取的数据长度,最大不超过237 个 + 读取结果内容 + + + + 写入多个数据到寄存器,地址范围 0 ~ 999,指定读取的数据长度,最大不超过237 个 + + 地址索引 + 等待写入的数据,最大不超过237 个长度 + 是否写入成功 + + + + 读取字节型变量的数据,标准地址范围为 0 ~ 99 + + 标准地址范围为 0 ~ 99 + 读取的结果对象 + + + + 将数据写入到字节型变量的地址里去,标准地址范围为 0 ~ 99 + + 标准地址范围为 0 ~ 99 + 等待写入的值 + 是否写入成功 + + + + 读取多个的字节型变量的数据,读取的最大个数为 474 个。 + + 标准地址范围为 0 ~ 99 + 读取的数据个数,读取的最大个数为 474 个 + 结果数据内容 + + + + 将多个字节的变量的数据写入到指定的地址,最大个数为 474 个,仅可指定2的倍数 + + 标准地址范围为 0 ~ 99 + 写入的值,最大个数为 474 个,仅可指定2的倍数 + 是否写入成功 + + + + 读取单个的整型变量数据,地址范围:0 ~ 99( 标准设定时) + + 0 ~ 99( 标准设定时) + 读取结果对象 + + + + 将单个的数据写入到整型变量去,地址范围:0 ~ 99( 标准设定时) + + 地址范围:0 ~ 99( 标准设定时) + 等待写入的值 + 是否写入成功 + + + + 读取多个的整型变量数据,地址范围:0 ~ 99( 标准设定时) + + 地址范围:0 ~ 99( 标准设定时) + 读取的个数 + 读取结果对象 + + + + 写入多个的整型变量数据到机器人,地址范围:0 ~ 99( 标准设定时) + + 地址范围:0 ~ 99( 标准设定时) + 等待写入的数据信息 + 是否写入成功 + + + + 读取单个的双精度整型变量数据,地址范围:0 ~ 99( 标准设定时) + + 0 ~ 99( 标准设定时) + 读取结果对象 + + + + 将单个的数据写入到双精度整型变量去,地址范围:0 ~ 99( 标准设定时) + + 地址范围:0 ~ 99( 标准设定时) + 等待写入的值 + 是否写入成功 + + + + 读取多个的双精度整型变量数据,地址范围:0 ~ 99( 标准设定时) + + 地址范围:0 ~ 99( 标准设定时) + 读取的个数,最大118个 + 读取结果对象 + + + + 写入多个的双精度整型变量数据到机器人,地址范围:0 ~ 99( 标准设定时) + + 地址范围:0 ~ 99( 标准设定时) + 等待写入的数据信息,最大118个数据 + 是否写入成功 + + + + 读取单个的实数型变量数据,地址范围:0 ~ 99( 标准设定时) + + 地址范围:0 ~ 99( 标准设定时) + 读取结果内容 + + + + 将单个的数据写入到实数型变量去,地址范围:0 ~ 99( 标准设定时) + + 地址范围:0 ~ 99( 标准设定时) + 写入的值 + 是否写入成功 + + + + 读取多个的实数型变量数据,地址范围:0 ~ 99( 标准设定时) + + 地址范围:0 ~ 99( 标准设定时) + 读取的个数,最大118个 + 读取的结果对象 + + + + 写入多个的实数型的变量数据到机器人,地址范围:0 ~ 99( 标准设定时) + + 地址范围:0 ~ 99( 标准设定时) + 等待写入的数据信息,最大118个数据 + 是否写入成功 + + + + 读取单个的字符串变量数据,地址范围:0 ~ 99( 标准设定时) + + 地址范围:0 ~ 99( 标准设定时) + 读取的结果对象 + + + + 写入单个的字符串变量数据,地址范围:0 ~ 99( 标准设定时) + + 地址范围:0 ~ 99( 标准设定时) + 写入的字符串数据 + 是否写入成功 + + + + 读取多个的字符串变量数据,地址范围:0 ~ 99( 标准设定时) + + 地址范围:0 ~ 99( 标准设定时) + 读取的字符串个数,最大个数为 29 + 读取的结果对象 + + + + 写入多个的字符串变量数据到机器人,地址范围:0 ~ 99( 标准设定时) + + 地址范围:0 ~ 99( 标准设定时) + 等待写入的字符串数组,最大数组长度为 29 + 是否写入成功 + + + + + + + + + + + + + + + + + + + + + + + + + + + + 读取机器人的时间信息,根据地址来获取不同的时间,地址如下:
+ 1: 控制电源的接通时间
+ 10: 伺服电源接通时间(TOTAL)
+ 11~18: 伺服电源接通时间(R1~R8)
+ 21~44: 伺服电源接通时间(S1~S24)
+ 110: 再线时间(TOTAL)
+ 111~118: 再线时间(R1~R8)
+ 121~144: 再线时间 (S1~S24)
+ 210: 移动时间(TOTAL)
+ 211~218: 移动时间(R1~R8)
+ 221~244: 移动时间(S1~S24)
+ 301~308: 作业时间(用途1~用途8) +
+ 时间的地址信息,具体参照方法的注释 + 读取的时间信息 +
+ + + + + + 读取系统的参数信息,其中系统种类参数:
+ 11~18:机种信息R1~R8;
+ 21~44:机种信息S1~S24;
+ 101~108: 用途信息(用途1~用途8);
+ 返回数据信息为数组,分别为 [0]:系统软件版本;[1]:机种名称/用途名称;[2]:参数版本 +
+ 统种类参数:11~18:机种信息R1~R8; 21~44:机种信息S1~S24; 101~108: 用途信息(用途1~用途8); + 返回数据信息为数组,分别为 [0]:系统软件版本;[1]:机种名称/用途名称;[2]:参数版本 +
+ + + + + + 指定坐标系的当前值读取。并且可以指定外部轴的有无。
+ The current value of the specified coordinate system is read. And you can specify the presence or absence of an external axis. +
+ 指定读取坐标 0:基座坐标,1:机器人坐标,2-65分别表示用户坐标1-64 + 外部轴的有/无 + 坐标系当前值 +
+ + + 安川机器人的数据信息,其中 Re只在YRC100中有效,没有外部轴的系统, 7-12外部轴的值设定为「0」 + + + + + 实例化一个默认的对象 + + + + + 指定类型及字符串数据信息来实例化一个对象 + + 类型信息 + 字符串数据 + + + + 动作速度( 0.01 ~ 100.0%) + + + 在读取时没有任何的含义,仅在写入数据是有效,默认为 100.0% + + + + + 参考系,0:基座坐标,1:机器人坐标,2-65分别表示用户坐标1-64 + + + + + X 坐标值( 单位mm、小数点第 3 位有效) + + + + + Y 坐标值(单位mm、小数点第 3 位有效) + + + + + Z 坐标值(单位 mm、小数点第 3 位有效) + + + + + 手腕姿勢 Rx 坐标值(单位 °、小数点第 4 位有效) + + + + + 手腕姿勢 Ry 坐标值(单位 °、 小数点第 4 位有效) + + + + + 手腕姿勢 Rz 坐标值(单位 °、 小数点第 4 位有效) + + + + + 肘角姿势 Re,仅在七轴机器人的情况下有效 + + + + + 形态数据,各个索引含义为 [0] 0:F lip,1:N o Flip [1] 0:上方肘,1:下方肘 [2] 0:正面,1:背面 [3] 0:R<180, 1:R≥180 [4] 0:T<180, 1:T≥180 [5] 0:S<180, 1:S≥180 + + + + + 工具编号( 0 ~ 63) + + + + + 第 7 轴脉冲数( 行走轴时、 单位mm) + + + + + 第 8 轴脉冲数( 行走轴时、 单位mm) + + + + + 第 9 轴脉冲数(行走轴时、 单位mm) + + + + + 第 10 轴脉冲数 + + + + + 第 11 轴脉冲数 + + + + + 第 12 轴脉冲数 + + + + + 将数据转换为写入命令的字符换,需要指定是否七轴机器人的信息 + + 机器人的型号信息 + 写入的数据信息 + + + + 从实际机器人读取到的数据解析出真实的机器人信息。 + + 机器人类型 + 值 + + + + + + + YRC机器人的类型 + + + + + YRC1000 型号,含有六轴机器人 + + + + + YRC100 型号,含有七轴机器人 + + + + + GEM相关的数据读写信息 + + + + + 使用指定的 接口来初始化 GEM 对象,然后进行数据读写操作 + + Secs的通信对象 + + + + S1F1的功能方法 + + 在线数据信息 + + + + S1F11的功能方法 + + 变量名称数组 + + + + S1F11的功能方法,带参数传递 + + + + + + + S1F13的功能方法,测试连接的 + + + + + + S1F15的功能方法 + + + 返回值说明,0: ok, 1: refused, 2: already online + + 返回值说明,0: ok, 1: refused, 2: already online + + + + S1F17的功能方法 + + + 返回值说明,0: ok, 1: refused, 2: already online + + 返回值说明,0: ok, 1: refused, 2: already online + + + + S2F13的功能方法 + + + + + + + Secs-1的协议信息 + + + + + 根据传入的参数信息,构建完整的SECS消息报文列表 + + 装置识别码 + 主功能码 + 子功能码 + 数据块号 + 消息序号 + 真实数据消息 + 是否必须回复讯息 + 完整的报文信息 + + + + 根据传入的参数信息,构建完整的SECS/HSMS消息报文列表 + + 装置识别码 + 主功能码 + 子功能码 + 数据块号 + 消息序号 + 真实数据消息 + 是否必须回复讯息 + 完整的报文信息 + + + + Secs2相关的规则 + + + + + 列表的类型信息 + + + + + ASCII字符串的信息 + + + + + 有符号的1个字节长度的整型 + + + + + 无符号的1个字节长度的整型 + + + + + 有符号的2个字节长度的整型 + + + + + 无符号的2个字节长度的整型 + + + + + 有符号的4个字节长度的整型 + + + + + 无符号的4个字节长度的整型 + + + + + 有符号的8个字节长度的整型 + + + + + 无符号的8个字节长度的整型 + + + + + 单浮点精度的类型 + + + + + 双浮点精度的类型 + + + + + Bool值信息 + + + + + 二进制的数据信息 + + + + + JIS8类型的数据 + + + + + 将返回的数据内容解析为实际的字符串信息,根据secsⅡ 协议定义的规则解析出实际的数据信息 + + 原始的字节数据内容 + 字符串对象的编码信息 + 字符串消息 + + + + SECS的字节顺序信息 + + + + + Hsms协议的消息定义 + + + + + + + + + + + + + + 串口类相关的Secs + + + + + 实例化一个默认的对象 + + + + + 执行SECS命令 + + 命令信息 + 是否成功的结果 + + + + HSMS的协议实现,SECS基于TCP的版本 + + + + + 下面就看看基本的操作内容 + + 如果想要手动处理下设备主要返回的数据,比如报警之类的,可以参考下面的方法 + + 关于类型,可以非常灵活的实例化,参考下面的示例代码 + + + + + + 实例化一个默认的对象
+ instantiate a default object +
+
+ + + 指定ip地址和端口号来实例化一个默认的对象
+ Specify the IP address and port number to instantiate a default object +
+ PLC的Ip地址 + PLC的端口 +
+ + + + + + 获取或设置当前的DeivceID信息 + + + + + 获取或设置当前的GEM信息,可以用来方便的调用一些常用的功能接口,或是自己实现自定义的接口方法 + + + + + 是否使用S0F0来初始化当前的设备对象信息 + + + + + 获取或设置用于字符串解析的编码信息 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Secs消息接收的事件 + + 数据的发送方 + 消息内容 + + + + 当接收到非应答消息的时候触发的事件 + + + + + + + + Secs Hsms的虚拟服务器,可以用来模拟Secs设备,等待客户端的连接,自定义响应客户端的数据 + + + + + 下面就看看基本的操作内容 + + 关于类型,可以非常灵活的实例化,参考下面的示例代码 + + + + + + 实例化一个默认的对象 + + + + + 获取或设置用于字符串解析的编码信息 + + + + + 从远程Socket异步接收的数据信息 + + 异步接收的对象 + + + + 当接收到来自客户的Secs信息时触发的对象
+ Object fired when Secs information from client is received +
+ 触发的服务器对象 + 消息的会话对象信息 + 实际的数据信息 +
+ + + 接收到数据的时候就触发的事件,示例详细参考API文档信息
+ An event that is triggered when data is received +
+ + 事件共有三个参数,sender指服务器本地的对象,为 对象,session 指会话对象,网为 ,message 为收到的原始数据 对象 + + + +
+ + + 触发一个数据接收的事件信息
+ Event information that triggers a data reception +
+ 数据的发送方 + 消息的会话对象信息 + 实际的数据信息 +
+ + + 向指定的会话信息发送SECS格式的原始字节数据信息,session 为当前的会话对象,receiveMessage为接收到数据,后续的参数才是真实的返回数据 + + 当前的会话对象 + 接收到的Secs数据 + 功能码1 + 功能码2 + 原始的字节数据 + 是否发送成功 + + + + + + + 发布数据到所有的在线客户端信息 + + 功能码1 + 功能码2 + 数据对象 + 是否发送成功 + + + + + + + ISecs的接口信息,支持了将数据发送到对方,或是使用问答机制从设备获取数据
+ The interface information of ISecs supports sending data to the other party, or using the question and answer mechanism to obtain data from the device +
+
+ + + 将数据发送到设备方去,只是单纯的发送数据过去,并不等待设备的数据返回,返回是否发送成功。
+ Sending data to the device side simply sends the data to the past, and does not wait for the data from the device to return, and returns whether the transmission is successful. +
+ 功能码1 + 功能码2 + 原始的字节数据 + 是否必须返回,此标记仅仅是secs报文的是否返回标记,不表示问答模式 + 是否发送成功的结果对象 +
+ + + 将数据发送到设备方去,只是单纯的发送数据过去,并不等待设备的数据返回,返回是否发送成功。
+ Sending data to the device side simply sends the data to the past, and does not wait for the data from the device to return, and returns whether the transmission is successful. +
+ 功能码1 + 功能码2 + Secs格式的对象信息 + 是否必须返回,此标记仅仅是secs报文的是否返回标记,不表示问答模式 + 是否发送成功的结果对象 +
+ + + 根据指定的功能码将数据报文发送给设备,并且等待从SECS设备返回Secs消息,本访问机制是问答模式的。
+ Send the data message to the device according to the specified function code, and wait for the Secs message to be returned from the SECS device. This access mechanism is in question-and-answer mode. +
+ 功能码1 + 功能码2 + 原始的字节数据 + 是否必须返回,此标记仅仅是secs报文的是否返回标记,不表示问答模式 + 返回SECS消息结果对象 +
+ + + 根据指定的功能码将数据报文发送给设备,并且等待从SECS设备返回Secs消息,本访问机制是问答模式的。
+ Send the data message to the device according to the specified function code, and wait for the Secs message to be returned from the SECS device. This access mechanism is in question-and-answer mode. +
+ 功能码1 + 功能码2 + Secs格式的对象信息 + 是否必须返回,此标记仅仅是secs报文的是否返回标记,不表示问答模式 + 返回SECS消息结果对象 +
+ + + 在线数据信息 + + + + + 实例化一个默认的对象 + + + + + 指定类型及其版本号来实例化一个对象 + + 类型信息 + 版本号 + + + + equipment model type + + + + + software revision + + + + + 赋值操作,可以直接赋值 数据 + + 数值 + 等值的消息对象 + + + + 也可以赋值给 数据 + + 对象 + 等值的消息对象 + + + + 数据类型的定义 + + + + + 列表数据类型,代号:L + + + + + Bool值类型,代号:BOOLEAN + + + + + 二进制数据,代号:B + + + + + ASCII编码的字符串,代号:A + + + + + JIS类型,代号:J + + + + + 一个字节的有符号数据,代号:I1 + + + + + 一个字节的无符号数据,代号:U1 + + + + + 两个字节的有符号数据,代号:I2 + + + + + 两个字节的无符号数据,代号:U2 + + + + + 四个字节的有符号数据,代号:I4 + + + + + 四个字节的无符号数据,代号:U4 + + + + + 八个字节的有符号数据,代号:I8 + + + + + 八个字节的无符号数据,代号:U8 + + + + + 四个字节的浮点数,代号:F4 + + + + + 八个字节的浮点数,代号:F8 + + + + + 这是一个空的类型信息 + + + + + Secs的消息类对象 + + + + + 实例化一个默认的对象 + + + + + + + + 通过原始的报文信息来实例化一个默认的对象 + + 原始的字节信息 + 起始的偏移地址 + + + + 设备的ID信息 + + + + + R=false, Host → Equipment; R=true, Host ← Equipment + + + + + W=false, 不必回复讯息;W=true, 必须回复讯息 + + + + + E=false, 尚有Block; E=true, 此为最后一个Block + + + + + Stream功能码 + + + + + Function功能码 + + + + + 获取或设置区块号信息 + + + + + 获取或设置消息ID信息 + + + + + 消息数据对象 + + + + + 获取或设置用于字符串解析的编码信息 + + + + + 获取当前消息的所有对象信息 + + Secs数据对象 + + + + 使用指定的编码获取当前消息的所有对象信息 + + 自定义的编码信息 + Secs数据对象 + + + + + + + 扩展类 + + + + + 获取显示的字符串文本信息 + + SECS消息类 + 字符串信息 + + + + SECS数据的对象信息,可以用来表示层级及嵌套的数据内容,如果需要显示,只需要 方法即可, + 如果需要发送SECS设备,只需要 ,并支持反序列化操作 ,无论是XML元素还是byte[]类型。 + + + XML序列化,反序列化例子:
+ SecsValue value = new SecsValue( new object[]{ 1.23f, "ABC" } );
+ XElement xml = value.ToXElement( );
+ SecsValue value2 = new SecsValue(xml); +
+ + 关于类型,可以非常灵活的实例化,参考下面的示例代码 + + +
+ + + 实例化一个空的SECS对象 + + + + + 从一个字符串对象初始化数据信息 + + 字符串信息 + + + + 从一个类型为 的对象初始化数据 + + 数据值信息 + + + + + + + 从一个类型为 的对象初始化数据 + + 数据值信息 + + + + 从一个类型为 的对象初始化数据 + + 数据值信息 + + + + 从一个类型为 的对象初始化数据 + + 数据值信息 + + + + 从一个类型为 的对象初始化数据 + + 数据值信息 + + + + + + + 从一个类型为 的对象初始化数据 + + 数据值信息 + + + + 从一个类型为 的对象初始化数据 + + 数据值信息 + + + + 从一个类型为 的对象初始化数据 + + 数据值信息 + + + + + + + 从一个类型为 的对象初始化数据 + + 数据值信息 + + + + + + + 从一个类型为 的对象初始化数据 + + 数据值信息 + + + + + + + 从一个类型为 的对象初始化数据 + + 数据值信息 + + + + + + + 从一个类型为 的对象初始化数据 + + 数据值信息 + + + + + + + 从一个类型为 数组的对象初始化数据,需要指定 来表示二进制还是byte数组类型 + + 数据值信息 + + + + 从一个类型为 的对象初始化数据 + + 数据值信息 + + + + + + + 从一个类型为 数组的对象初始化数据,初始化后,本对象为 类型 + + 数据值信息 + + + + 通过指定的参数信息来实例化一个对象 + + 数据的类型信息 + 数据值信息,当是类型时,本值为空 + + + + 从完整的XML元素进行实例化一个对象 + + 符合SECS的XML数据表示元素 + 解析失败的异常 + + + + 类型信息 + + + + + 字节长度信息,如果是 类型的话,就是数组长度,如果如 类型,就是字符串的字节长度,其他类型都是表示数据个数
+ Byte length information, if it is of type , it is the length of the array, if it is of type , + it is the byte length of the string, other types are the number of data +
+
+ + + 数据值信息,也可以是 的列表信息,在设置列表之前,必须先设置类型 + + + + + 获取当前数值的XML表示形式 + + XML元素信息 + + + + 当前的对象信息转换回实际的原始字节信息,方便写入操作 + + 原始字节数据 + + + + 使用指定的编码将当前的对象信息转换回实际的原始字节信息,方便写入操作 + + 编码信息 + 原始字节数据 + + + + + + + 将当前的对象转为 数组对象信息,也就是标签名列表 + + 数组对象 + + + + + 从原始的字节数据中解析出实际的 对象内容。 + + 原始字节数据 + 编码信息 + SecsItemValue对象 + + + + 获取空的列表信息 + + secs数据对象 + + + + 获取空的对象信息 + + secs数据对象 + + + + 获取当前的 的数据长度信息 + + secs值 + 数据长度信息 + + + + 检查类型 的类型是否为 ,如果不是,就抛出异常 + + 等待转换的对象 + 转换异常 + + + + 变量名称类对象 + + + + + 变量的ID信息 + + + + + 变量的名称信息 + + + + + 变量的单位信息 + + + + + + + + 赋值操作,可以直接赋值 数据 + + 数值 + 等值的消息对象 + + + + 也可以赋值给 数据 + + 对象 + 等值的消息对象 + + + + 校验方式 + + + + + 和校验 + + + + + CRC校验的方式 + + + + + 用于CRC16验证的类,提供了标准的验证方法,可以方便快速的对数据进行CRC校验
+ The class for CRC16 validation provides a standard validation method that makes it easy to CRC data quickly +
+ + 本类提供了几个静态的方法,用来进行CRC16码的计算和验证的,多项式码可以自己指定配置,但是预置的寄存器为0xFF 0xFF + + + 先演示如何校验一串数据的CRC码 + + 然后下面是如何生成你自己的CRC校验码 + + +
+ + + 来校验对应的接收数据的CRC校验码,默认多项式码为0xA001
+ To verify the CRC check code corresponding to the received data, the default polynomial code is 0xA001 +
+ 需要校验的数据,带CRC校验码 + 返回校验成功与否 +
+ + + 指定多项式码来校验对应的接收数据的CRC校验码
+ Specifies a polynomial code to validate the corresponding CRC check code for the received data +
+ 需要校验的数据,带CRC校验码 + 多项式码高位 + 多项式码低位 + 返回校验成功与否 +
+ + + 获取对应的数据的CRC校验码,默认多项式码为0xA001
+ Get the CRC check code of the corresponding data, the default polynomial code is 0xA001 +
+ 需要校验的数据,不包含CRC字节 + 返回带CRC校验码的字节数组,可用于串口发送 +
+ + + 通过指定多项式码来获取对应的数据的CRC校验码
+ The CRC check code of the corresponding data is obtained by specifying the polynomial code +
+ 需要校验的数据,不包含CRC字节 + 多项式码地位 + 多项式码高位 + 预置的高位值 + 预置的低位值 + 返回带CRC校验码的字节数组,可用于串口发送 +
+ + + 通过指定多项式码来获取对应的数据的CRC校验码
+ The CRC check code of the corresponding data is obtained by specifying the polynomial code +
+ 需要校验的数据,不包含CRC字节 + 计算的起始字节索引 + 计算的字节长度 + 多项式码地位 + 多项式码高位 + 预置的高位值 + 预置的低位值 + 返回带CRC校验码的字节数组,可用于串口发送 +
+ + + 所有串行通信类的基类,提供了一些基础的服务,核心的通信实现
+ The base class of all serial communication classes provides some basic services for the core communication implementation +
+
+ + + 实例化一个无参的构造方法
+ Instantiate a parameterless constructor +
+
+ + + 设置一个新的串口管道,一般来说不需要调用本方法,当多个串口设备共用一个COM口时才需要使用本方法进行设置共享的管道。
+ To set a new serial port pipe, generally speaking, you do not need to call this method. + This method is only needed to set the shared pipe when multiple serial devices share the same COM port. +
+ + 如果需要设置共享的串口管道的话,需要是设备类对象实例化之后立即进行设置,如果在串口的初始化之后再设置操作,串口的初始化可能会失效。
+ If you need to set a shared serial port pipeline, you need to set it immediately after the device class object is instantiated. + If you set the operation after the initialization of the serial port, the initialization of the serial port may fail. +
+ 共享的串口管道信息 +
+ + + 获取当前用于通信的管道信息
+ Get the current pipe information used for communication +
+ 管道对象 +
+ + + 初始化串口信息,9600波特率,8位数据位,1位停止位,无奇偶校验
+ Initial serial port information, 9600 baud rate, 8 data bits, 1 stop bit, no parity +
+ + portName 支持格式化的方式,例如输入 COM3-9600-8-N-1,COM5-19200-7-E-2,其中奇偶校验的字母可选,N:无校验,O:奇校验,E:偶校验,停止位可选 0, 1, 2, 1.5 四种选项 + + 端口号信息,例如"COM3" +
+ + + 初始化串口信息,波特率,8位数据位,1位停止位,无奇偶校验
+ Initializes serial port information, baud rate, 8-bit data bit, 1-bit stop bit, no parity +
+ 端口号信息,例如"COM3" + 波特率 +
+ + + 初始化串口信息,波特率,数据位,停止位,奇偶校验需要全部自己来指定
+ Start serial port information, baud rate, data bit, stop bit, parity all need to be specified +
+ 端口号信息,例如"COM3" + 波特率 + 数据位 + 停止位 + 奇偶校验 +
+ + + 根据自定义初始化方法进行初始化串口信息
+ Initialize the serial port information according to the custom initialization method +
+ 初始化的委托方法 +
+ + + 打开一个新的串行端口连接
+ Open a new serial port connection +
+
+ + + 获取一个值,指示串口是否处于打开状态
+ Gets a value indicating whether the serial port is open +
+ 是或否 +
+ + + 关闭当前的串口连接
+ Close the current serial connection +
+
+ + + 将原始的字节数据发送到串口,然后从串口接收一条数据。
+ The raw byte data is sent to the serial port, and then a piece of data is received from the serial port. +
+ 发送的原始字节数据 + 带接收字节的结果对象 +
+ + + + + + + + + + + + 将原始的字节数据发送到串口,然后从串口接收一条数据。
+ The raw byte data is sent to the serial port, and then a piece of data is received from the serial port. +
+ 发送的原始字节数据 + 是否有数据相应,如果为true, 需要等待数据返回,如果为false, 不需要等待数据返回 + 是否需要对命令重新打包,在重写方法后才会有影响 + 带接收字节的结果对象 +
+ + + 将数据发送到当前的串口通道上去,并且从串口通道接收一串原始的字节报文,默认对方必须返回数据,也可以手动修改不返回数据信息。
+ Send data to the current serial channel, and receive a string of original byte messages from the serial channel. By default, the other party must return data, or you can manually modify it to not return data information. +
+ 指定的串口通信对象,最终将使用该串口进行数据的收发 + 发送到串口的报文数据信息,如果True,那么就使用方法打包发送的报文信息。 + 是否等待数据的返回,默认为 True + 是否需要对命令重新打包,在重写方法后才会有影响 + 接收的完整的报文信息 +
+ + + 清除串口缓冲区的数据,并返回该数据,如果缓冲区没有数据,返回的字节数组长度为0
+ The number sent clears the data in the serial port buffer and returns that data, or if there is no data in the buffer, the length of the byte array returned is 0 +
+ 是否操作成功的方法 +
+ + + + + + + + + + + + + + + + + + 发送数据到串口去。
+ Send data to serial port. +
+ 串口对象 + 字节数据 + 是否发送成功 +
+ + + 检查当前从串口接收的数据是否是完整的,如果是完整的,则需要返回 True,串口数据接收立即完成,默认返回 False
+ Check whether the data currently received from the serial port is complete. If it is complete, you need to return True. + The serial port data reception is completed immediately, and the default returns False +
+ + 在默认情况下,串口在接收数据之后,需要再等一个 的时间,再没有接收到数据,才真的表明数据接收完成了, + 但是在某些情况下,可以判断是否接收完成,然后直接返回,不需要在等一个 的时间,从而提高一倍的通信性能。
+ By default, after the serial port receives data, it needs to wait another time, and no more data is received, + it really indicates that the data reception is complete, but in some cases, you can Judge whether the reception is complete, + and then return directly. There is no need to wait for a time, + thereby doubling the communication performance. +
+ 目前已经接收到数据流 + 如果数据接收完成,则返回True, 否则返回False +
+ + + 从串口接收一串字节数据信息,直到没有数据为止,如果参数awaitData为false, 第一轮接收没有数据则返回
+ Receives a string of bytes of data information from the serial port until there is no data, and returns if the parameter awaitData is false +
+ 串口对象 + 是否必须要等待数据返回 + 结果数据对象 +
+ + + + + + + + + 接收数据的超时时间,默认5000ms
+ Timeout for receiving data, default is 5000ms +
+
+ + + 连续串口缓冲数据检测的间隔时间,默认20ms,该值越小,通信速度越快,但是越不稳定。
+ Continuous serial port buffer data detection interval, the default 20ms, the smaller the value, the faster the communication, but the more unstable. +
+
+ + + 获取或设置连续接收空的数据次数,在数据接收完成时有效,每个单位消耗的时间为,配合来更好的控制完整数据接收。
+ Get or set the number of consecutive empty data receptions, which is valid when data reception is completed. The time consumed by each unit is , + which is better with Control complete data reception. +
+
+ + + 是否在发送数据前清空缓冲数据,默认是false
+ Whether to empty the buffer before sending data, the default is false +
+
+ + + 当前连接串口信息的端口号名称
+ The port name of the current connection serial port information +
+
+ + + 当前连接串口信息的波特率
+ Baud rate of current connection serial port information +
+
+ + + 释放当前的对象 + + 是否在 + + + + 释放当前的对象 + + + + + + + + 串口交互的核心 + + + + + 从串口中至少接收的字节长度信息 + + + + + 串口设备交互类的基类,实现了接口的基础方法方法,需要使用继承重写来实现字节读写,bool读写操作。
+ The base class of the serial device interaction class, which implements the basic methods of the interface, + requires inheritance rewriting to implement byte read and write, and bool read and write operations. +
+ + 本类实现了不同的数据类型的读写交互的api,继承自本类,重写下面的四个方法将可以实现你自己的设备通信对象 + + + 方法,读取字节数组的方法。 + + + 方法,写入字节数组的方法。 + + + 方法,读取bool数组的方法。 + + + 方法,写入bool数组的方法。 + + + 如果需要实现异步的方法。那就需要重写下面的四个方法。 + + + 方法,读取字节数组的方法。 + + + 方法,写入字节数组的方法。 + + + 方法,读取bool数组的方法。 + + + 方法,写入bool数组的方法。 + + + +
+ + + 默认的构造方法实现的设备信息 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 用于LRC验证的类,提供了标准的验证方法
+ The class used for LRC verification provides a standard verification method +
+
+ + + 获取对应的数据的LRC校验码
+ Class for LRC validation that provides a standard validation method +
+ 需要校验的数据,不包含LRC字节 + 返回带LRC校验码的字节数组,可用于串口发送 +
+ + + 检查数据是否符合LRC的验证
+ Check data for compliance with LRC validation +
+ 等待校验的数据,是否正确 + 是否校验成功 +
+ + + + + + 根据传入的原始字节数组,计算和校验信息,可以指定起始的偏移地址和尾部的字节数量信息
+ Calculate and check the information according to the incoming original byte array, you can specify the starting offset address and the number of bytes at the end +
+ 原始字节数组信息 + 起始的偏移地址信息 + 尾部的字节数量信息 + 和校验的结果 +
+ + + 计算数据的和校验,并且输入和校验的值信息
+ Calculate the sum check of the data, and enter the value information of the sum check +
+ 原始字节数组信息 + 起始的偏移地址信息 + 尾部的字节数量信息 +
+ + + 计算数据的和校验,并且和当前已经存在的和校验信息进行匹配,返回是否匹配成功
+ Calculate the sum check of the data, and match it with the existing sum check information, and return whether the match is successful +
+ 原始字节数组信息 + 起始的偏移地址信息 + 尾部的字节数量信息 + 和校验是否检查通过 +
+ + + 系统的字符串资源及多语言管理中心
+ System string resource and multi-language management Center +
+
+ + + 获取或设置系统的语言选项
+ Gets or sets the language options for the system +
+
+ + + 将语言设置为中文
+ Set the language to Chinese +
+
+ + + 将语言设置为英文
+ Set the language to English +
+
+ + + websocket协议的客户端实现,支持从服务器订阅,发布数据内容信息,详细参考api文档信息
+ Client implementation of the websocket protocol. It supports subscribing from the server and publishing data content information. +
+ + 本客户端使用起来非常的方便,基本就是实例化,绑定一个数据接收的事件即可,如下所示 + + 假设我们需要发数据给服务端,那么可以参考如下的方式 + + 如果我们需要搭配服务器来做订阅推送的功能的话,写法上会稍微有点区别,按照下面的代码来写。 + + 当网络发生异常的时候,我们需要这么来进行重新连接。 + + +
+ + + 使用指定的ip,端口来实例化一个默认的对象
+ Use the specified ip and port to instantiate a default objects +
+ Ip地址信息 + 端口号信息 +
+ + + 使用指定的ip,端口,额外的url信息来实例化一个默认的对象
+ Use the specified ip, port, and additional url information to instantiate a default object +
+ Ip地址信息 + 端口号信息 + 额外的信息,比如 /A/B?C=123456 +
+ + + 使用指定的url来实例化一个默认的对象,例如 ws://127.0.0.1:1883/A/B?C=123456 或是 ws://www.hslcommunication.cn:1883
+ Use the specified url to instantiate a default object, such as ws://127.0.0.1:1883/A/B?C=123456 or ws://www.hslcommunication.cn:1883s +
+ 完整的ws地址 +
+ + + Mqtt服务器的ip地址
+ IP address of Mqtt server +
+
+ + + 端口号。默认1883
+ The port number. Default 1883 +
+
+ + + 连接服务器,实例化客户端之后,至少要调用成功一次,如果返回失败,那些请过一段时间后重新调用本方法连接。
+ After connecting to the server, the client must be called at least once after instantiating the client. + If the return fails, please call this method to connect again after a period of time. +
+ 连接是否成功 +
+ + + 连接服务器,实例化客户端之后,至少要调用成功一次,如果返回失败,那些请过一段时间后重新调用本方法连接。
+ After connecting to the server, the client must be called at least once after instantiating the client. + If the return fails, please call this method to connect again after a period of time. +
+ 订阅的消息 + 连接是否成功 +
+ + + 关闭Mqtt服务器的连接。
+ Close the connection to the Mqtt server. +
+
+ + + + + + + + + + + + 发送数据到WebSocket的服务器
+ Send data to WebSocket server +
+ 消息 + 是否发送成功 +
+ + + 发送数据到WebSocket的服务器,可以指定是否进行掩码操作
+ Send data to the WebSocket server, you can specify whether to perform a mask operation +
+ 是否进行掩码操作 + 消息 + 是否发送成功 +
+ + + 发送自定义的命令到WebSocket服务器,可以指定操作码,是否掩码操作,原始字节数据
+ Send custom commands to the WebSocket server, you can specify the operation code, whether to mask operation, raw byte data +
+ 操作码 + 是否进行掩码操作 + 原始字节数据 + 是否发送成功 +
+ + + websocket的消息收到委托
+ websocket message received delegate +
+ websocket的消息 +
+ + + websocket的消息收到时触发
+ Triggered when a websocket message is received +
+
+ + + 连接服务器成功的委托
+ Connection server successfully delegated +
+
+ + + 当客户端连接成功触发事件,就算是重新连接服务器后,也是会触发的
+ The event is triggered when the client is connected successfully, even after reconnecting to the server. +
+
+ + + 当网络发生异常的时候触发的事件,用户应该在事件里进行重连服务器 + + + + + 获取或设置当前客户端的连接超时时间,默认10,000毫秒,单位ms
+ Gets or sets the connection timeout of the current client. The default is 10,000 milliseconds. The unit is ms. +
+
+ + + 获取当前的客户端状态是否关闭了连接,当自己手动处理网络异常事件的时候,在重连之前就需要判断是否关闭了连接。
+ Obtain whether the current client status has closed the connection. When manually handling network abnormal events, you need to determine whether the connection is closed before reconnecting. +
+
+ + + 释放当前的对象 + + + + + + + + + + + + websocket的相关辅助的方法 + + + + + 计算websocket返回得令牌 + + 请求的令牌 + 返回的令牌 + + + + 根据http网页的信息,计算出返回的安全令牌 + + 网页信息 + 返回的安全令牌 + + + + 检测当前的反馈对象是否是标准的websocket请求 + + http的请求内容 + 是否验证成功 + + + + 从当前的websocket的HTTP请求头里,分析出订阅的主题内容 + + http的请求内容 + 是否验证成功 + + + + 从当前的Websocket的Url里,分析出订阅的主题内容 + + URL内容,例如 ws://127.0.0.1:1883/HslSubscribes=A,B + 消息主题 + + + + 获取初步握手的时候的完整返回的数据信息 + + 请求的网页信息 + 完整的返回信息 + + + + 创建连接服务器的http请求,输入订阅的主题信息 + + 远程服务器的ip地址 + 远程服务器的端口号 + 参数信息 + 通知hsl的服务器,需要订阅的topic信息 + 报文信息 + + + + 创建连接服务器的http请求,采用问答的机制 + + 远程服务器的ip地址 + 远程服务器的端口号 + 报文信息 + + + + 根据额外的参数信息,创建新的websocket的请求信息 + + ip地址 + 端口号 + 跟在端口号后面的额外的参数信息 + 额外的参数信息 + 报文信息 + + + + 将普通的文本信息转换成websocket的报文 + + 操作信息码 + 是否使用掩码 + 等待转换的数据信息 + 数据包 + + + + 将普通的文本信息转换成websocket的报文 + + 操作信息码 + 是否使用掩码 + 等待转换的数据信息 + 数据包 + + + + 从socket接收一条完整的websocket数据,返回的数据信息
+ Receive a complete websocket data from the socket, return the data information of the +
+ 用于接收数据的委托方法之一 + 当前通信的管道信息 + 包含websocket消息的结果内容 +
+ + + 从socket接收一条片段数据,返回的数据信息和是否最后一条数据内容
+ Receive a piece of fragment data from the socket, return the data information of and whether the last data content +
+ 用于接收数据的委托方法之一 + 当前通信的管道信息 + 包含websocket消息的结果内容 +
+ + + + + + + + + websocket 协议下的单个消息的数据对象
+ Data object for a single message under the websocket protocol +
+
+ + + 是否存在掩码
+ Whether a mask exists +
+
+ + + 当前的websocket的操作码
+ The current websocket opcode +
+
+ + + 负载数据 + + + + + + + + WebSocket的问答机制的客户端,本客户端将会在请求头上追加 RequestAndAnswer: true,本客户端将会请求服务器的信息,然后等待服务器的返回
+ Client of WebSocket Q & A mechanism, this client will append RequestAndAnswer: true to the request header, this client will request the server information, and then wait for the server to return +
+
+ + + 根据指定的ip地址及端口号,实例化一个默认的对象
+ Instantiates a default object based on the specified IP address and port number +
+ 远程服务器的ip地址 + 端口号信息 +
+ + + + + + + + + + + + + + + 和websocket的服务器交互,将负载数据发送到服务器端,然后等待接收服务器的数据
+ Interact with the websocket server, send the load data to the server, and then wait to receive data from the server +
+ 数据负载 + 返回的结果数据 +
+ + + + + + + + + WebSocket协议的实现,支持创建自定义的websocket服务器,直接给其他的网页端,客户端,手机端发送数据信息,详细看api文档说明
+ The implementation of the WebSocket protocol supports the creation of custom websocket servers and sends data information directly to other web pages, clients, and mobile phones. See the API documentation for details. +
+ + 使用本组件库可以非常简单方便的构造属于你自己的websocket服务器,从而实现和其他的客户端进行通信,尤其是和网页进行通讯, + + 当客户端发送数据给服务器的时候,会发一个事件,并且把当前的会话暴露出来,下面举例打印消息,并且演示一个例子,发送数据给指定的会话。 + + 也可以在其他地方发送数据给所有的客户端,只要调用一个方法就可以了。 + + 当客户端上线之后也触发了当前的事件,我们可以手动捕获到 + + 我们再来看看一个高级的操作,实现订阅,大多数的情况,websocket被设计成了订阅发布的操作。基本本服务器可以扩展出非常复杂功能的系统,我们来看一种最简单的操作。 +
+ 客户端给服务器发的数据都视为主题(topic),这样服务器就可以辨认出主题信息,并追加主题。如下这么操作。 + + 然后在发布的时候,调用下面的代码。 + + 可以看到,我们这里只有订阅操作,如果想要实现更为复杂的操作怎么办?丰富客户端发来的数据,携带命令,数据,就可以区分了。比如json数据。具体的实现需要看各位能力了。 +
+
+ + + 实例化一个默认的对象
+ Instantiate a default object +
+
+ + + 使用SSL通信 + + 传递一个证书 + + + + + + + + + + websocket的消息收到委托
+ websocket message received delegate +
+ 当前的会话对象 + websocket的消息 +
+ + + websocket的消息收到时触发
+ Triggered when a websocket message is received +
+
+ + + 当前websocket连接上服务器的事件委托
+ Event delegation of the server on the current websocket connection +
+ 当前的会话对象 +
+ + + Websocket的客户端连接上来时触发
+ Triggered when a Websocket client connects +
+
+ + + Websocket的客户端下线时触发
+ Triggered when Websocket client connects +
+
+ + + + + + + + + 向所有的客户端强制发送消息
+ Force message to all clients +
+ 消息内容 +
+ + + + + + 向订阅了topic主题的客户端发送消息
+ Send messages to clients subscribed to topic +
+ 主题 + 消息内容 + 指定当前的主题是否驻留 +
+ + + + + + + + + + + + 向指定的客户端发送数据
+ Send data to the specified client +
+ 会话内容 + 消息内容 +
+ + + 给一个当前的会话信息动态添加订阅的主题
+ Dynamically add subscribed topics to a current session message +
+ 会话内容 + 主题信息 +
+ + + 获取当前的在线的客户端数量
+ Get the current number of online clients +
+
+ + + + + + 获取或设置当前的服务器是否对订阅主题信息缓存,方便订阅客户端立即收到结果,默认开启
+ Gets or sets whether the current server caches the topic information of the subscription, so that the subscription client can receive the results immediately. It is enabled by default. +
+
+ + + 获取当前的在线的客户端信息,可以用于额外的分析或是显示。 + + + + + 设置的参数,最小单位为1s,当超过设置的时间间隔必须回复PONG报文,否则服务器认定为掉线。默认120秒
+ Set the minimum unit of the parameter is 1s. When the set time interval is exceeded, the PONG packet must be returned, otherwise the server considers it to be offline. 120 seconds by default +
+ + 保持连接(Keep Alive)是一个以秒为单位的时间间隔,它是指客户端返回一个PONG报文到下一次返回PONG报文的时候, + 两者之间允许空闲的最大时间间隔。客户端负责保证控制报文发送的时间间隔不超过保持连接的值。 + +
+ + + 获取或是设置用于保持连接的心跳时间的发送间隔。默认30秒钟,需要在服务启动之前设置
+ Gets or sets the sending interval of the heartbeat time used to keep the connection. 30 seconds by default, need to be set before the service starts +
+
+ + + 让Websocket客户端正常下线,调用本方法即可自由控制会话客户端强制下线操作。
+ Let the Websocket client go offline normally. Call this method to freely control the session client to force offline operation. +
+ 当前的会话信息 + 下线的原因,默认为空 +
+ + + 获取或设置是否使用CA证书的方式来通信,当为空的时候,默认不使用证书,不为空则使用证书,需要传入证书的完整路径信息
+ Obtain or set whether to use the certificate authority to communicate, when empty, the default is not to use the certificate, + not empty to use the certificate, you need to pass in the full path information of the certificate +
+
+ + + 在使用证书的情况下,获取或设置是否对服务器的证书进行检查并校验的操作,如果设置为True,也就是检查,安全性更高,反之不检查服务器的证书是否合法
+ In the case of using a certificate, obtain or set whether to check and verify the server's certificate, if set to True, + that is, check, the security is higher, and vice versa, the server's certificate is not checked +
+
+ + + 释放当前的对象 + + + + + + + + + + + + websocket 的会话客户端 + + + + + 实例化一个默认的对象 + + + + + 当前客户端的激活时间 + + + + + 获取当前的客户端的上线时间 + + + + + 当前客户端绑定的套接字对象 + + + + + 当前客户端订阅的所有的Topic信息 + + + + + 远程的客户端的ip及端口信息 + + + + + 当前的会话是否是问答客户端,如果是问答客户端的话,数据的推送是无效的。 + + + + + 客户端请求的url信息,可能携带一些参数信息 + + + + + 检查当前的连接对象是否在 + + 主题信息 + 是否启用通配符订阅操作 + 是否包含的结果信息 + + + + 动态增加一个订阅的信息 + + 订阅的主题 + + + + 动态移除一个订阅的信息 + + 订阅的主题 + + + + + + + websocket 协议的 op的枚举信息 + + + + + 连续消息分片 + + + + + 文本消息分片 + + + + + 二进制消息分片 + + + + + 连接关闭 + + + + + 心跳检查 + + + + + 心跳检查 + + + + + + + + 读取地址的线圈的通断情况 + + 起始地址,示例:"100" + True或是False + + + + + 批量读取地址的线圈的通断情况 + + 起始地址,示例:"100" + 读取长度 + True或是False + + + + + 写入线圈的通断值 + + 起始地址,示例:"100" + 是否通断 + True或是False + + + + + 写入线圈数组的通断值 + + 起始地址,示例:"100" + 是否通断 + True或是False + + + + + 读取地址的离散线圈的通断情况 + + 起始地址,示例:"100" + True或是False + + + + + 批量读取地址的离散线圈的通断情况 + + 起始地址,示例:"100" + 读取长度 + True或是False + + + + + 写入离散线圈的通断值 + + 起始地址,示例:"100" + 是否通断 + + + + + 写入离散线圈数组的通断值 + + 起始地址,示例:"100" + 是否通断 + + + + + + + + + + + +
+
diff --git a/Main/MCEdit/MCEdit.csproj b/Main/MCEdit/MCEdit.csproj index 5b3f971..41b7bd2 100644 --- a/Main/MCEdit/MCEdit.csproj +++ b/Main/MCEdit/MCEdit.csproj @@ -101,6 +101,9 @@ False ..\..\Libraries\Host.dll
+ + ..\..\Actions\HslCommunication.dll + False ..\..\PlugInPlatform\ICSharpCode.Core.dll diff --git a/Main/MCRun/App.config b/Main/MCRun/App.config index 907b13e..f04b98a 100644 --- a/Main/MCRun/App.config +++ b/Main/MCRun/App.config @@ -26,7 +26,7 @@ - + diff --git a/Main/MCRun/MCRun.csproj b/Main/MCRun/MCRun.csproj index 345b2a2..96da538 100644 --- a/Main/MCRun/MCRun.csproj +++ b/Main/MCRun/MCRun.csproj @@ -96,6 +96,9 @@ False ..\..\Libraries\Host.dll + + ..\..\Actions\HslCommunication.dll + False ..\..\PlugInPlatform\ICSharpCode.Core.dll @@ -282,10 +285,6 @@ {ad132cad-5288-44dc-a38f-4b0658fc228c} Mesnac.DoUtils - - {88eac8d1-8783-478c-ad9d-f916673b7004} - Mesnac.PlcUtils - {CC98CB3B-F532-4510-AC08-7DDBD520CB06} Mesnac.Gui.Run.Global diff --git a/Main/MCRun/Program.cs b/Main/MCRun/Program.cs index f914200..57a49b5 100644 --- a/Main/MCRun/Program.cs +++ b/Main/MCRun/Program.cs @@ -15,12 +15,7 @@ namespace MCRun using Mesnac.Core.Service; using Mesnac.DoUtils; using Mesnac.Gui.Workbench; - using Mesnac.PlcUtils; - using Mesnac.PlcUtils.common; - using Mesnac.PlcUtils.enumInfo; - using Mesnac.PlcUtils.Impl; - using System.Drawing.Drawing2D; - using System.Threading.Tasks; + class Program { diff --git a/Mesnac.PlcUtils/Mesnac.PlcUtils.csproj b/Mesnac.PlcUtils/Mesnac.PlcUtils.csproj index f58389d..b601b2c 100644 --- a/Mesnac.PlcUtils/Mesnac.PlcUtils.csproj +++ b/Mesnac.PlcUtils/Mesnac.PlcUtils.csproj @@ -31,9 +31,6 @@ 4 - - ..\PlugInPlatform\HslCommunication.dll - ..\PlugInPlatform\ICSharpCode.Core.dll diff --git a/PlugInPlatform/HslCommunication.dll b/PlugInPlatform/HslCommunication.dll deleted file mode 100644 index 7082ca2..0000000 Binary files a/PlugInPlatform/HslCommunication.dll and /dev/null differ diff --git a/SlnMix.VS2013.sln b/SlnMix.VS2013.sln index 4d441b2..7d5ae39 100644 --- a/SlnMix.VS2013.sln +++ b/SlnMix.VS2013.sln @@ -161,8 +161,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mesnac.Action.Default", "Ac EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "PlcUtils", "PlcUtils", "{DE8C4FC3-17D6-4217-8AB1-72ADE8D85810}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mesnac.PlcUtils", "Mesnac.PlcUtils\Mesnac.PlcUtils.csproj", "{88EAC8D1-8783-478C-AD9D-F916673B7004}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DoUtils", "DoUtils", "{9F21B6A6-9B19-4AAC-88EF-A430D8808540}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mesnac.DoUtils", "Mesnac.DoUtils\Mesnac.DoUtils.csproj", "{AD132CAD-5288-44DC-A38F-4B0658FC228C}" @@ -321,18 +319,6 @@ Global {6A2190C6-B530-4D5B-BD34-29EFB0431F67}.Release|Mixed Platforms.Build.0 = Release|Any CPU {6A2190C6-B530-4D5B-BD34-29EFB0431F67}.Release|x86.ActiveCfg = Release|Any CPU {6A2190C6-B530-4D5B-BD34-29EFB0431F67}.Release|x86.Build.0 = Release|Any CPU - {88EAC8D1-8783-478C-AD9D-F916673B7004}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {88EAC8D1-8783-478C-AD9D-F916673B7004}.Debug|Any CPU.Build.0 = Debug|Any CPU - {88EAC8D1-8783-478C-AD9D-F916673B7004}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU - {88EAC8D1-8783-478C-AD9D-F916673B7004}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU - {88EAC8D1-8783-478C-AD9D-F916673B7004}.Debug|x86.ActiveCfg = Debug|Any CPU - {88EAC8D1-8783-478C-AD9D-F916673B7004}.Debug|x86.Build.0 = Debug|Any CPU - {88EAC8D1-8783-478C-AD9D-F916673B7004}.Release|Any CPU.ActiveCfg = Release|Any CPU - {88EAC8D1-8783-478C-AD9D-F916673B7004}.Release|Any CPU.Build.0 = Release|Any CPU - {88EAC8D1-8783-478C-AD9D-F916673B7004}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU - {88EAC8D1-8783-478C-AD9D-F916673B7004}.Release|Mixed Platforms.Build.0 = Release|Any CPU - {88EAC8D1-8783-478C-AD9D-F916673B7004}.Release|x86.ActiveCfg = Release|Any CPU - {88EAC8D1-8783-478C-AD9D-F916673B7004}.Release|x86.Build.0 = Release|Any CPU {AD132CAD-5288-44DC-A38F-4B0658FC228C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AD132CAD-5288-44DC-A38F-4B0658FC228C}.Debug|Any CPU.Build.0 = Debug|Any CPU {AD132CAD-5288-44DC-A38F-4B0658FC228C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU @@ -373,7 +359,6 @@ Global {91C803A6-90D1-4361-8B92-9AFD9E766411} = {8314C6B1-6D76-4441-85DB-562354BA4578} {D0C0324F-434E-47EB-8F7C-BA6CD7F233B4} = {DE938080-4A00-4686-9CE4-1C33FCA86346} {6A2190C6-B530-4D5B-BD34-29EFB0431F67} = {66F3B234-E56C-4EF4-AB6D-BB6D91467855} - {88EAC8D1-8783-478C-AD9D-F916673B7004} = {DE8C4FC3-17D6-4217-8AB1-72ADE8D85810} {AD132CAD-5288-44DC-A38F-4B0658FC228C} = {9F21B6A6-9B19-4AAC-88EF-A430D8808540} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution