HslCommunication
一个连接池管理器,负责维护多个可用的连接,并且自动清理,扩容
管理的连接类,需要支持IConnector接口
需要先实现 接口的对象,然后就可以实现真正的连接池了,理论上可以实现任意的连接对象,包括modbus连接对象,各种PLC连接对象,数据库连接对象,redis连接对象,SimplifyNet连接对象等等。下面的示例就是modbus-tcp的实现
要想真正的支持连接池访问,还需要服务器支持一个端口的多连接操作,三菱PLC的端口就不支持,如果要测试示例代码的连接池对象,需要使用本组件的来创建服务器对象
下面举例实现一个modbus的连接池对象,先实现接口化的操作
然后就可以实现真正的连接池了
实例化一个连接池对象,需要指定如果创建新实例的方法
创建连接对象的委托
获取可用的对象
可用的连接对象
使用完之后需要通知管理器
连接对象
获取或设置最大的连接数
获取或设置连接过期的时间,单位秒,默认30秒
当前已经使用的连接数
连接池的接口,连接池的管理对象必须实现此接口
为了使用完整的连接池功能,需要先实现本接口,然后配合来使用
下面举例实现一个modbus的连接池对象
指示当前的连接是否在使用用
唯一的GUID码
最新一次使用的时间
打开连接
关闭并释放
离散傅氏变换的快速算法,处理的信号,适合单周期信号数为2的N次方个,支持变换及逆变换
快速傅立叶变换
实数部分
变换后的数组值
快速傅立叶变换
实数部分,数组长度最好为2的n次方
虚数部分,数组长度最好为2的n次方
变换后的数组值
快速傅立叶变换的逆变换
实数部分,数组长度最好为2的n次方
虚数部分,数组长度最好为2的n次方
2的多少次方
系统的基本授权类
设置本组件系统的授权信息
授权码
一个高效的数组管理类,用于高效控制固定长度的数组实现
泛型类型
实例化一个对象,需要指定数组的最大数据对象
数据的个数
是否从最后一个数添加
获取数据的个数
新增一个数据值
数据值
批量的增加数据
批量数据信息
获取数据的数组值
数组值
获取或设置指定索引的位置的数据
索引位置
数据值
支持字符串信息加载存储的接口,定义了几个通用的方法
获取需要保存的数据,需要重写实现
需要存储的信息
从字符串加载数据,需要重写实现
字符串数据
不使用解密方法从文件读取数据
不使用加密方法保存数据到文件
文件路径的存储
文件存储功能的基类,包含了文件存储路径,存储方法等
需要继承才能实现你想存储的数据,比较经典的例子就是存储你的应用程序的配置信息,通常的格式就是xml文件或是json文件。具体请看例子:
下面举例实现两个字段的普通数据存储
然后怎么调用呢?
如果你想实现加密存储,这样就不用关心被用户看到了。
如果还是担心被反编译获取数据,那么这个密钥就要来自服务器的数据,本地不做存储。
实例化一个文件存储的基类
在日志保存时的标记当前调用类的信息
获取需要保存的数据,需要重写实现
需要存储的信息
从字符串加载数据,需要重写实现
字符串数据
不使用解密方法从文件读取数据
使用用户自定义的解密方法从文件读取数据
用户自定义的解密方法
不使用加密方法保存数据到文件
使用用户自定义的加密方法保存数据到文件
用户自定义的加密方法
文件存储的路径
日志记录类
一个软件基础类,提供常用的一些静态方法 ->
A software-based class that provides some common static methods
获取文件的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
文本数据信息
Md5字符串
获取文本字符串信息的Md5码,使用指定的编码
文本数据信息
编码信息
Md5字符串
从一个字节大小返回带单位的描述
实际的大小值
最终的字符串值
比如说我们获取了文件的长度,这个长度可以来自于本地,也可以来自于数据库查询
从一个时间差返回带单位的描述
实际的时间差
最终的字符串值
比如说我们获取了一个时间差信息
一个通用的数组新增个数方法,会自动判断越界情况,越界的情况下,会自动的截断或是填充 ->
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
数组的类型
等待分割的数组
指定的长度信息
分割后结果内容
将整数进行有效的拆分成数组
整数信息
单个的数组长度
拆分后的数组长度
判断两个字节的指定部分是否相同 ->
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对象
值名称
值数据
获取一个异常的完整错误信息 ->
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进制表示的字符串 ->
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
输入的字节信息
反转后的数据
将原始的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格式的数据内容
数据
ASCII格式的字节数组
从short构建一个ASCII格式的数据内容
数据
ASCII格式的字节数组
从ushort构建一个ASCII格式的数据内容
数据
ASCII格式的字节数组
从字节数组构建一个ASCII格式的数据内容
字节信息
ASCII格式的地址
将bool数组转换到byte数组 ->
Converting a bool array to a byte array
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数组
拼接2个字节数组成一个数组 ->
Splicing 2 bytes to to an array
数组一
数组二
拼接后的数组
选择一个byte数组的前面的几个byte数据信息
原始的数据信息
数据的长度
选择的前面的几个数据信息
将一个byte数组的前面指定位数移除,返回新的一个数组 ->
Removes the preceding specified number of bits in a byte array, returning a new array
字节数组
等待移除的长度
新的数据
将一个byte数组的后面指定位数移除,返回新的一个数组 ->
Removes the specified number of digits after a byte array, returning a new array
字节数组
等待移除的长度
新的数据
将一个byte数组的前后移除指定位数,返回新的一个数组 ->
Removes a byte array before and after the specified number of bits, returning a new array
字节数组
前面的位数
后面的位数
新的数据
设置或获取系统框架的版本号 ->
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
随机字符串数据
一个线程安全的缓存数据块,支持批量动态修改,添加,并获取快照
这个类可以实现什么功能呢,就是你有一个大的数组,作为你的应用程序的中间数据池,允许你往byte[]数组里存放指定长度的子byte[]数组,也允许从里面拿数据,
这些操作都是线程安全的,当然,本类扩展了一些额外的方法支持,也可以直接赋值或获取基本的数据类型对象。
此处举例一些数据的读写说明,可以此处的数据示例。
使用默认的大小初始化缓存空间
使用指定的容量初始化缓存数据块
初始化的容量
设置指定的位置的数据块,如果超出,则丢弃数据
bool值
目标存储的索引
设置指定的位置的数据块,如果超出,则丢弃数据
bool数组值
目标存储的索引
获取指定的位置的bool值,如果超出,则引发异常
目标存储的索引
获取索引位置的bool数据值
获取指定位置的bool数组值,如果超过,则引发异常
目标存储的索引
读取的数组长度
bool数组值
设置指定的位置的数据块,如果超出,则丢弃数据
数据块信息
目标存储的索引
设置指定的位置的数据块,如果超出,则丢弃数据
数据块信息
目标存储的索引
准备拷贝的数据长度
设置指定的位置的数据块,如果超出,则丢弃数据
数据块信息
Data中的起始位置
目标存储的索引
准备拷贝的数据长度
获取内存指定长度的数据信息
起始位置
数组长度
返回实际的数据信息
获取内存所有的数据信息
实际的数据信息
设置byte类型的数据到缓存区
byte数值
索引位置
设置short类型的数据到缓存区
short数组
索引位置
设置short类型的数据到缓存区
short数值
索引位置
设置ushort类型的数据到缓存区
ushort数组
索引位置
设置ushort类型的数据到缓存区
ushort数值
索引位置
设置int类型的数据到缓存区
int数组
索引位置
设置int类型的数据到缓存区
int数值
索引位置
设置uint类型的数据到缓存区
uint数组
索引位置
设置uint类型的数据到缓存区
uint数值
索引位置
设置float类型的数据到缓存区
float数组
索引位置
设置float类型的数据到缓存区
float数值
索引位置
设置long类型的数据到缓存区
long数组
索引位置
设置long类型的数据到缓存区
long数值
索引位置
设置ulong类型的数据到缓存区
ulong数组
索引位置
设置ulong类型的数据到缓存区
ulong数值
索引位置
设置double类型的数据到缓存区
double数组
索引位置
设置double类型的数据到缓存区
double数值
索引位置
获取byte类型的数据
索引位置
byte数值
获取short类型的数组到缓存区
索引位置
数组长度
short数组
获取short类型的数据到缓存区
索引位置
short数据
获取ushort类型的数组到缓存区
索引位置
数组长度
ushort数组
获取ushort类型的数据到缓存区
索引位置
ushort数据
获取int类型的数组到缓存区
索引位置
数组长度
int数组
获取int类型的数据到缓存区
索引位置
int数据
获取uint类型的数组到缓存区
索引位置
数组长度
uint数组
获取uint类型的数据到缓存区
索引位置
uint数据
获取float类型的数组到缓存区
索引位置
数组长度
float数组
获取float类型的数据到缓存区
索引位置
float数据
获取long类型的数组到缓存区
索引位置
数组长度
long数组
获取long类型的数据到缓存区
索引位置
long数据
获取ulong类型的数组到缓存区
索引位置
数组长度
ulong数组
获取ulong类型的数据到缓存区
索引位置
ulong数据
获取double类型的数组到缓存区
索引位置
数组长度
ulong数组
获取double类型的数据到缓存区
索引位置
double数据
读取自定义类型的数据,需要规定解析规则
类型名称
起始索引
自定义的数据类型
写入自定义类型的数据到缓存中去,需要规定生成字节的方法
自定义类型
实例对象
起始地址
获取或设置当前的数据缓存类的解析规则
释放当前的对象
释放当前的对象
内存队列的基类
字节数据流
数据的长度
数据数组变动时的数据锁
用于从保存的数据对象初始化的
获取原本的数据字节
一个内存队列缓存的类,数据类型为Int64
数据的本身面貌
实例化一个数据对象
用于从保存的数据对象初始化的
线程安全的添加数据
值
一个内存队列缓存的类,数据类型为Int32
数据的本身面貌
实例化一个数据对象
用于从保存的数据对象初始化的
线程安全的添加数据
值
安全的获取数组队列
一个自定义的支持序列化反序列化的异常类,具体用法参照第四版《CLR Via C#》P414
泛型异常
用于反序列化的
消息
实例化一个异常对象
消息
内部异常类
实例化一个异常对象
异常消息
消息
内部异常类
获取存储对象的序列化数据
序列化的信息
流的上下文
获取描述当前异常的消息
确定指定的object是否等于当前的object
异常对象
是否一致
用作特定类型的哈希函数
int值
异常消息基类
获取消息文本
软件的邮箱类,用于发送邮箱数据
如果您想实现自己的邮件发送中心,就可以去对应的邮件服务器注册,如果是想快速实现邮件的发送,本系统提供了2个静态的已经注册好了的邮箱发送器。
以下的代码演示了通过静态的发送对象来发送邮件,包含了发送普通的邮件,和发送html邮件。
系统连续发送失败的次数,为了不影响系统,连续三次失败就禁止发送
系统提供一个默认的163邮箱发送账号,只要更改接收地址即可发送服务,可能会被拦截
系统提供一个默认的QQ邮箱发送账号,只要更改接收地址即可发送服务,发送成功概率比较高
实例化一个邮箱发送类,需要指定初始化信息
初始化的方法
发送地址,应该和账户匹配
邮件接收地址
初始化的方法比较复杂,需要参照示例代码。
系统的邮件发送客户端
发送邮件的地址
邮件发送的地址
发生BUG至邮件地址,需要提前指定发送地址,否则失败
异常的BUG,同样试用兼容类型
是否发送成功,内容不正确会被视为垃圾邮件
发送邮件至地址,需要提前指定发送地址,否则失败
邮件主题
邮件内容
是否发送成功,内容不正确会被视为垃圾邮件
发送邮件至地址,需要提前指定发送地址,否则失败
邮件主题
邮件内容
是否是html格式化文本
是否发送成功,内容不正确会被视为垃圾邮件
发生BUG至邮件地址,需要提前指定发送地址,否则失败
异常的BUG,同样试用兼容类型
额外信息
是否发送成功,内容不正确会被视为垃圾邮件
发送邮件的方法,需要指定接收地址,主题及内容
接收地址
邮件主题
邮件内容
是否发送成功,内容不正确会被视为垃圾邮件
发送邮件的方法,默认发送别名,优先级,是否HTML
接收地址
邮件主题
邮件内容
是否是html格式的内容
是否发送成功,内容不正确会被视为垃圾邮件
发送邮件的方法,需要提供完整的参数信息
发送地址
发送别名
接收地址
邮件主题
邮件内容
优先级
邮件内容是否是HTML语言
发生是否成功,内容不正确会被视为垃圾邮件
一个简单通用的消息队列
类型
实例化一个对象
所有临时存储的数据
临时消息存储的最大条数,必须大于10
获取最新添加进去的数据
将集合进行锁定
新增一条数据
获取存储字符串
获取加载字符串
系统的消息类,用来发送消息,和确认消息的
发送方名称
接收方名称
发送时间
发送的消息内容
消息是否已经被查看
一个用于自动流水号生成的类,必须指定保存的文件,实时保存来确认安全
序号生成器软件,当获取序列号,清空序列号操作后,会自动的将ID号存储到本地的文件中,存储方式采用乐观并发模型实现。
此处举个例子,也是Demo程序的源代码,包含了2个按钮的示例和瞬间调用100万次的性能示例。
百万次调用的实际耗时取决于计算机的性能,不同的计算机的表现存在差异,比如作者的:i5-4590cpu,内存ddr3-8G表示差不多在800毫秒左右
实例化一个流水号生成的对象
流水号的头文本
流水号带的时间信息
流水号数字的标准长度,不够补0
流水号存储的文本位置
当前的生成序列号
流水号的文本头
时间格式默认年月日
流水号数字应该显示的长度
获取流水号的值
字符串信息
加载流水号
源字符串信息
清除流水号计数,进行重新计数
获取流水号数据
新增计数后的信息
获取流水号数据
指定一个新的文本头
带头信息的计数后的信息
单纯的获取数字形式的流水号
新增计数后的信息
高性能存储块
一个简单的不持久化的序号自增类,采用线程安全实现,并允许指定最大数字,将包含该最大值,到达后清空从指定数开始
实例化一个自增信息的对象,包括最大值
数据的最大值,必须指定
数据的起始值,默认为0
获取自增信息
计数自增后的值
重置当前序号的最大值
最大值
增加的单元,如果设置为0,就是不增加。注意,不能小于0
返回表示当前对象的字符串
返回具体的值信息
释放当前对象所占用的资源
字符串加密解密相关的自定义类
加密数据,采用对称加密的方式
待加密的数据
加密后的数据
加密数据,采用对称加密的方式
待加密的数据
密钥,长度为8,英文或数字
加密后的数据
解密过程,使用的是对称的加密
等待解密的字符
返回原密码,如果解密失败,返回‘解密失败’
解密过程,使用的是对称的加密
等待解密的字符
密钥,长度为8,英文或数字
返回原密码,如果解密失败,返回‘解密失败’
系统版本类,由三部分组成,包含了一个大版本,小版本,修订版,还有一个开发者维护的内部版
根据格式化字符串的版本号初始化
格式化的字符串,例如:1.0或1.0.0或1.0.0.0503
根据指定的数字实例化一个对象
主版本
次版本
修订版
根据指定的数字实例化一个对象
主版本
次版本
修订版
内部版本号
主版本
次版本
修订版
内部版本号,或者是版本号表示为年月份+内部版本的表示方式
根据格式化为支持返回的不同信息的版本号
C返回1.0.0.0
N返回1.0.0
S返回1.0
格式化信息
版本号信息
获取版本号的字符串形式,如果内部版本号为0,则显示时不携带
版本号信息
判断两个实例是否相等
版本号
是否一致
获取哈希值
哈希值
判断是否相等
第一个版本
第二个版本
是否相同
判断是否不相等
第一个版本号
第二个版本号
是否相同
判断一个版本是否大于另一个版本
第一个版本
第二个版本
是否相同
判断第一个版本是否小于第二个版本
第一个版本号
第二个版本号
是否小于
版本信息类,用于展示版本发布信息
版本的发行日期
版本的更新细节
版本号
获取版本号
字符串信息
一个负责压缩解压数据字节的类
压缩字节数据
等待被压缩的数据
压缩之后的字节数据
解压压缩后的数据
压缩后的数据
压缩前的原始字节数据
所有设备通信类的地址基础类
起始地址
解析字符串的地址
地址信息
返回表示当前对象的字符串
字符串数据
设备地址数据的信息,通常包含起始地址,数据类型,长度
数字的起始地址,也就是偏移地址
读取的数据长度
从指定的地址信息解析成真正的设备地址信息
地址信息
数据长度
三菱的数据地址表示形式
实例化一个默认的对象
三菱的数据地址信息
从指定的地址信息解析成真正的设备地址信息,默认是三菱的地址
地址信息
数据长度
从实际三菱的地址里面解析出
三菱的地址数据信息
读取的数据长度
是否成功的结果对象
从实际基恩士的地址里面解析出
基恩士的地址数据信息
读取的数据长度
是否成功的结果对象
计算松下的MC协议的偏移地址的机制
字符串形式的地址
实际的偏移地址
从实际松下的地址里面解析出
松下的地址数据信息
读取的数据长度
是否成功的结果对象
Modbus协议地址格式,可以携带站号,功能码,地址信息
实例化一个默认的对象
实例化一个默认的对象,使用默认的地址初始化
传入的地址信息,支持富地址,例如s=2;x=3;100
实例化一个默认的对象,使用默认的地址初始化
传入的地址信息,支持富地址,例如s=2;x=3;100
默认的功能码信息
实例化一个默认的对象,使用默认的地址初始化
站号信息
功能码信息
地址信息
站号信息
功能码
解析Modbus的地址码
地址数据信息
创建一个读取线圈的字节对象
读取的站号
读取数据的长度
原始的modbus指令
创建一个读取离散输入的字节对象
读取的站号
读取数据的长度
原始的modbus指令
创建一个读取寄存器的字节对象
读取的站号
读取数据的长度
原始的modbus指令
创建一个写入单个线圈的指令
站号
值
原始的modbus指令
创建一个写入单个寄存器的指令
站号
值
原始的modbus指令
创建一个写入批量线圈的指令
站号
值
原始的modbus指令
创建一个写入批量寄存器的指令
站号
值
原始的modbus指令
地址新增指定的数
数据值信息
新增后的地址信息
地址新增1
新增后的地址信息
返回表示当前对象的字符串
地址表示形式
西门子的地址数据信息,当处于写入时,Length无效
需要读取的数据的代码
PLC的DB块数据信息
从指定的地址信息解析成真正的设备地址信息
地址信息
数据长度
计算特殊的地址信息 -> Calculate Special Address information
字符串地址 -> String address
实际值 -> Actual value
从实际的西门子的地址里面
西门子的地址数据信息
读取的数据长度
是否成功的结果对象
从实际的西门子的地址里面
西门子的地址数据信息
读取的数据长度
是否成功的结果对象
异形消息对象,用于异形客户端的注册包接收以及验证使用
本协议的消息头长度
头子节信息
内容字节信息
检查接收的数据是否合法
令牌
是否合法
从头子节信息中解析出接下来需要接收的数据长度
接下来的数据长度
获取头子节里的特殊标识
标识信息
发送的字节信息
用于和 AllenBradley PLC 交互的消息协议类
消息头的指令长度
从当前的头子节文件中提取出接下来需要接收的数据长度
返回接下来的数据内容长度
检查头子节的合法性
特殊的令牌,有些特殊消息的验证
是否成功的结果
获取头子节里的消息标识
消息id
消息头字节
消息内容字节
发送的字节信息
埃夫特机器人的消息对象
消息头的指令长度
从当前的头子节文件中提取出接下来需要接收的数据长度
返回接下来的数据内容长度
检查头子节的合法性
特殊的令牌,有些特殊消息的验证
是否成功的结果
获取头子节里的消息标识
消息标识
消息头字节
消息内容字节
发送的字节信息
旧版的机器人的消息类对象,保留此类为了实现兼容
消息头的指令长度
从当前的头子节文件中提取出接下来需要接收的数据长度
返回接下来的数据内容长度
检查头子节的合法性
特殊的令牌,有些特殊消息的验证
是否合法
获取头子节里的消息标识
标识信息
消息头字节
消息内容字节
发送的字节信息
西门子Fetch/Write消息解析协议
消息头的指令长度
从当前的头子节文件中提取出接下来需要接收的数据长度
返回接下来的数据内容长度
检查头子节的合法性
特殊的令牌,有些特殊消息的验证
是否合法
获取头子节里的消息标识
消息标识
消息头字节
消息内容字节
发送的字节信息
用于欧姆龙通信的Fins协议的消息解析规则
消息头的指令长度
从当前的头子节文件中提取出接下来需要接收的数据长度
返回接下来的数据内容长度
检查头子节的合法性
特殊的令牌,有些特殊消息的验证
是否成功的结果
获取头子节里的消息标识
消息id
消息头字节
消息内容字节
发送的字节信息
本组件系统使用的默认的消息规则,说明解析和反解析规则的
本协议的消息头长度
头子节信息
内容字节信息
检查接收的数据是否合法
令牌
是否合法
从头子节信息中解析出接下来需要接收的数据长度
接下来的数据长度
获取头子节里的特殊标识
标识信息
发送的字节信息
本系统的消息类,包含了各种解析规则,数据信息提取规则
消息头的指令长度
从当前的头子节文件中提取出接下来需要接收的数据长度
返回接下来的数据内容长度
检查头子节的合法性
特殊的令牌,有些特殊消息的验证
是否成功的结果
获取头子节里的消息标识
消息标识
消息头字节
消息内容字节
发送的字节信息
Kuka机器人的 KRC4 控制器中的服务器KUKAVARPROXY
本协议的消息头长度
头子节信息
内容字节信息
检查接收的数据是否合法
令牌
是否合法
从头子节信息中解析出接下来需要接收的数据长度
接下来的数据长度
获取头子节里的特殊标识
标识信息
发送的字节信息
LSIS的PLC的FastEnet的消息定义
西门子头字节的长度
头子节的数据
内容字节的数据
检查头子节是否合法的判断
令牌
是否合法的
获取剩余的内容长度
数据内容长度
获取消息号,此处无效
消息标识
发送的字节信息
三菱的A兼容1E帧协议解析规则
消息头的指令长度
从当前的头子节文件中提取出接下来需要接收的数据长度
返回接下来的数据内容长度
检查头子节的合法性
特殊的令牌,有些特殊消息的验证
获取头子节里的消息标识
消息头字节
消息内容字节
发送的字节信息
基于MC协议的Qna兼容3E帧协议的ASCII通讯消息机制
消息头的指令长度
从当前的头子节文件中提取出接下来需要接收的数据长度
返回接下来的数据内容长度
检查头子节的合法性
特殊的令牌,有些特殊消息的验证
是否成功的结果
获取头子节里的消息标识
消息标识
消息头字节
消息内容字节
发送的字节信息
三菱的Qna兼容3E帧协议解析规则
消息头的指令长度
从当前的头子节文件中提取出接下来需要接收的数据长度
返回接下来的数据内容长度
检查头子节的合法性
特殊的令牌,有些特殊消息的验证
是否成功的结果
获取头子节里的消息标识
消息标识
消息头字节
消息内容字节
发送的字节信息
Modbus-Tcp协议支持的消息解析类
消息头的指令长度
从当前的头子节文件中提取出接下来需要接收的数据长度
返回接下来的数据内容长度
检查头子节的合法性
特殊的令牌,有些特殊消息的验证
是否成功的结果
获取头子节里的消息标识
消息标识
消息头字节
消息内容字节
发送的字节信息
OpenProtocol协议的消息
本协议的消息头长度
头子节信息
内容字节信息
检查接收的数据是否合法
令牌
是否合法
从头子节信息中解析出接下来需要接收的数据长度
接下来的数据长度
获取头子节里的特殊标识
标识信息
发送的字节信息
西门子S7协议的消息解析规则
西门子头字节的长度
头子节的数据
内容字节的数据
检查头子节是否合法的判断
令牌
是否合法的
获取剩余的内容长度
数据内容长度
获取消息号,此处无效
消息标识
发送的字节信息
所有的和设备或是交互类统一读写标准
Modbus类,PLC类均实现了本接口,可以基于本接口实现统一所有的不同种类的设备的数据交互
此处举例实现modbus,三菱,西门子三种设备的统一的数据交互
批量读取底层的数据信息,需要指定地址和长度,具体的结果取决于实现
数据地址
数据长度
带有成功标识的byte[]数组
读取16位的有符号整型
起始地址
带有成功标识的short数据
读取16位的有符号整型数组
起始地址
读取的数组长度
带有成功标识的short数组
读取16位的无符号整型
起始地址
带有成功标识的ushort数据
读取16位的无符号整型数组
起始地址
读取的数组长度
带有成功标识的ushort数组
读取32位的有符号整型
起始地址
带有成功标识的int数据
读取32位有符号整型的数组
起始地址
数组长度
带成功标志的结果数据对象
读取32位的无符号整型
起始地址
带有成功标识的uint数据
读取设备的uint类型的数组
起始地址
数组长度
带成功标志的结果数据对象
读取64位的有符号整型
起始地址
带有成功标识的long数据
读取64位的有符号整型数组
起始地址
数组长度
带成功标志的结果数据对象
读取64位的无符号整型
起始地址
带有成功标识的ulong数据
读取64位的无符号整型的数组
起始地址
数组长度
带成功标志的结果数据对象
读取单浮点精度的数据
起始地址
带有成功标识的float数据
读取单浮点精度的数组
起始地址
数组长度
带成功标志的结果数据对象
读取双浮点精度的数据
起始地址
带有成功标识的double数据
读取双浮点精度的数据的数组
起始地址
数组长度
带成功标志的结果数据对象
读取字符串数据,
起始地址
数据长度
带有成功标识的string数据
读取自定义的数据类型,需要继承自IDataTransfer接口
自定义的类型
起始地址
带有成功标识的自定义类型数据
从设备里读取支持Hsl特性的数据内容,该特性为,详细参考论坛的操作说明。
自定义的数据类型对象
包含是否成功的结果对象
写入byte数组数据
起始地址
写入值
带有成功标识的结果类对象
写入short数据
起始地址
写入值
带有成功标识的结果类对象
写入short数组
起始地址
写入值
带有成功标识的结果类对象
写入ushort数据
起始地址
写入值
带有成功标识的结果类对象
写入ushort数组
起始地址
写入值
带有成功标识的结果类对象
写入int数据
起始地址
写入值
带有成功标识的结果类对象
写入int[]数组
起始地址
写入值
带有成功标识的结果类对象
写入uint数据
起始地址
写入值
带有成功标识的结果类对象
写入uint[]数组
起始地址
写入值
带有成功标识的结果类对象
写入long数据
起始地址
写入值
带有成功标识的结果类对象
写入long数组
起始地址
写入值
带有成功标识的结果类对象
写入ulong数据
起始地址
写入值
带有成功标识的结果类对象
写入ulong数组
起始地址
写入值
带有成功标识的结果类对象
写入float数据
起始地址
写入值
带有成功标识的结果类对象
写入float数组
起始地址
写入值
带有成功标识的结果类对象
写入double数据
起始地址
写入值
带有成功标识的结果类对象
写入double数组
起始地址
写入值
带有成功标识的结果类对象
写入字符串信息,编码为ASCII
起始地址
写入值
带有成功标识的结果类对象
写入指定长度的字符串信息,编码为ASCII
起始地址
写入值
字符串的长度
带有成功标识的结果类对象
写入自定义类型的数据,该类型必须继承自IDataTransfer接口
类型对象
起始地址
写入值
带有成功标识的结果类对象
从设备里读取支持Hsl特性的数据内容,该特性为,详细参考论坛的操作说明。
自定义的数据类型对象
包含是否成功的结果对象
批量读取底层的数据信息,需要指定地址和长度,具体的结果取决于实现
数据地址
数据长度
带有成功标识的byte[]数组
读取底层的bool数据信息,具体的结果取决于实现
数据地址
带有成功标识的byte[]数组
写入bool数组数据
起始地址
写入值
带有成功标识的结果类对象
写入bool数据
起始地址
写入值
带有成功标识的结果类对象
所有的机器人的统一读写标准
根据地址读取机器人的原始的字节数据信息
指定的地址信息,对于某些机器人无效
带有成功标识的byte[]数组
根据地址读取机器人的字符串的数据信息
地址信息
带有成功标识的字符串数据
根据地址,来写入设备的相关的数据
指定的地址信息,有些机器人可能不支持
原始的字节数据信息
是否成功的写入
根据地址,来写入设备相关的数据
指定的地址信息,有些机器人可能不支持
字符串的数据信息
是否成功的写入
异形客户端的基类,提供了基础的异形操作
默认的无参构造方法
当接收到了新的请求的时候执行的操作
异步对象
终结点
当有服务器连接上来的时候触发
获取返回的命令信息
状态
回发的指令信息
状态登录成功
重复登录
禁止登录
密码错误
检测当前的DTU是否在线
检测当前的dtu是否允许登录
设置密码,长度为6
设置可信任的客户端列表
退出异形客户端
异形客户端的会话
获取本对象的字符串表示形式
带登录认证的服务器类
当客户端的socket登录的时候额外检查的信息
套接字
终结点
验证的结果
获取或设置是否对客户端启动账号认证
新增账户,如果想要启动账户登录,比如将设置为True。
账户名称
账户名称
删除一个账户的信息
账户名称
释放当前的对象
是否托管对象
释放当前的对象
本系统所有网络类的基类,该类为抽象类,无法进行实例化
network base class, support basic operation with socket
实例化一个NetworkBase对象
令牌的默认值为空,都是0x00
组件的日志工具,支持日志记录
只要实例化即可以记录日志,实例化的对象需要实现接口 ,本组件提供了三个日志记录类,你可以实现基于 的对象。
如下的实例化适用于所有的Network及其派生类,以下举两个例子,三菱的设备类及服务器类
网络类的身份令牌
适用于Hsl协议相关的网络通信类,不适用于设备交互类。
此处以 服务器类及 客户端类的令牌设置举例
是否使用同步的网络通讯
通讯类的核心套接字
检查网络套接字是否操作超时,需要对套接字进行封装
通常是 对象
接收固定长度的字节数组
Receive Special Length Bytes
网络通讯的套接字
准备接收的数据长度
包含了字节数据的结果类
接收固定长度的字节数组
Receive Special Length Bytes
网络通讯的套接字
准备接收的数据长度
包含了字节数据的结果类
接收一条完整的 数据内容 ->
Receive a complete data content
网络的套接字
超时时间
消息的格式定义
带有是否成功的byte数组对象
发送消息给套接字,直到完成的时候返回
网络套接字
字节数据
发送是否成功的结果
发送数据异步返回的方法
异步对象
发送一个异步的数据信息,该方式在NET35里是不可用的。
网络的套接字
数据内容
是否发送成功
创建一个新的socket对象并连接到远程的地址,默认超时时间为10秒钟
Ip地址
端口号
返回套接字的封装结果对象
创建一个新的socket对象并连接到远程的地址
Ip地址
端口号
连接的超时时间
返回套接字的封装结果对象
创建一个新的socket对象并连接到远程的地址
连接的目标终结点
连接的超时时间
返回套接字的封装结果对象
当连接的结果返回
异步对象
读取流中的数据到缓存区
数据流
缓冲区
带有成功标志的读取数据长度
将缓冲区的数据写入到流里面去
数据流
缓冲区
是否写入成功
检查当前的头子节信息的令牌是否是正确的
头子节数据
令牌是验证成功
[自校验] 发送字节数据并确认对方接收完成数据,如果结果异常,则结束通讯
网络套接字
头指令
用户指令
发送的数据
是否发送成功
[自校验] 发送字节数据并确认对方接收完成数据,如果结果异常,则结束通讯
网络套接字
用户指令
发送的数据
是否发送成功
[自校验] 直接发送字符串数据并确认对方接收完成数据,如果结果异常,则结束通讯
网络套接字
用户指令
发送的数据
是否发送成功
[自校验] 直接发送字符串数组并确认对方接收完成数据,如果结果异常,则结束通讯
网络套接字
用户指令
发送的字符串数组
是否发送成功
[自校验] 直接发送字符串数组并确认对方接收完成数据,如果结果异常,则结束通讯
网络套接字
用户指令
用户名
密码
是否发送成功
[自校验] 接收一条完整的同步数据,包含头子节和内容字节,基础的数据,如果结果异常,则结束通讯
套接字
超时时间设置,如果为负数,则不检查超时
包含是否成功的结果对象
result
[自校验] 从网络中接收一个字符串数据,如果结果异常,则结束通讯
套接字
包含是否成功的结果对象
[自校验] 从网络中接收一个字符串数组,如果结果异常,则结束通讯
套接字
包含是否成功的结果对象
[自校验] 从网络中接收一串字节数据,如果结果异常,则结束通讯
套接字的网络
包含是否成功的结果对象
从网络中接收Long数据
将long数据发送到套接字
返回表示当前对象的字符串
字符串
所有虚拟的数据服务器的基类
实例化一个默认的数据服务器的对象
从设备读取原始数据
起始地址
地址长度
带有成功标识的结果对象
需要在继承类中重写实现,并且实现地址解析操作
将原始数据写入设备
起始地址
原始数据
带有成功标识的结果对象
需要在继承类中重写实现,并且实现地址解析操作
从字节数据加载数据信息
字节数据
将数据信息存储到字节数组去
所有的内容
将本系统的数据池数据存储到指定的文件
指定文件的路径
从文件加载数据池信息
文件路径
系统的数据转换接口
当接收到来自客户的数据信息时触发的对象,该数据可能来自tcp或是串口
本服务器对象
实际的数据信息
接收到数据的时候就行触发
触发一个数据接收的事件信息
接收数据信息
Show DataSend To PLC
OnDataSend
RaiseDataSend
单个数据字节的长度,西门子为2,三菱,欧姆龙,modbusTcp就为1,AB PLC无效
对设备来说,一个地址的数据对应的字节数,或是1个字节或是2个字节
当客户端登录后,进行Ip信息的过滤,然后触发本方法,也就是说之后的客户端需要
网络套接字
终端节点
当接收到了新的请求的时候执行的操作
异步对象
终结点
设置并启动受信任的客户端登录并读写,如果为null,将关闭对客户端的ip验证
受信任的客户端列表
检查该Ip地址是否是受信任的
Ip地址信息
是受信任的返回True,否则返回False
获取受信任的客户端列表
字符串数据信息
在线的客户端的数量
新增一个在线的客户端信息
会话内容
移除在线的客户端信息
会话内容
关闭之后进行的操作
读取自定义类型的数据,需要规定解析规则
类型名称
起始地址
带有成功标识的结果对象
需要是定义一个类,选择好相对于的ByteTransform实例,才能调用该方法。
此处演示三菱的读取示例,先定义一个类,实现接口
接下来就可以实现数据的读取了
写入自定义类型的数据到设备去,需要规定生成字节的方法
自定义类型
起始地址
实例对象
带有成功标识的结果对象
需要是定义一个类,选择好相对于的实例,才能调用该方法。
此处演示三菱的读取示例,先定义一个类,实现接口
接下来就可以实现数据的读取了
读取设备的short类型的数据
起始地址
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
读取设备的short类型的数组
起始地址
数组长度
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
读取设备的ushort数据类型的数据
起始地址
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
读取设备的ushort类型的数组
起始地址
数组长度
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
读取设备的int类型的数据
起始地址
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
读取设备的int类型的数组
起始地址
数组长度
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
读取设备的uint类型的数据
起始地址
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
读取设备的uint类型的数组
起始地址
数组长度
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
读取设备的float类型的数据
起始地址
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
读取设备的float类型的数组
起始地址
数组长度
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
读取设备的long类型的数据
起始地址
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
读取设备的long类型的数组
起始地址
数组长度
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
读取设备的ulong类型的数据
起始地址
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
读取设备的ulong类型的数组
起始地址
数组长度
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
读取设备的double类型的数据
起始地址
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
读取设备的double类型的数组
起始地址
数组长度
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
读取设备的字符串数据,编码为ASCII
起始地址
地址长度
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向设备中写入short数组,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向设备中写入short数据,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向设备中写入ushort数组,返回是否写入成功
要写入的数据地址
要写入的实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向设备中写入ushort数据,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向设备中写入int数组,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向设备中写入int数据,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向设备中写入uint数组,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向设备中写入uint数据,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向设备中写入float数组,返回是否写入成功
数据地址
实际数据
返回写入结果
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向设备中写入float数据,返回是否写入成功
数据地址
实际数据
返回写入结果
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向设备中写入long数组,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向设备中写入long数据,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向P设备中写入ulong数组,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向设备中写入ulong数据,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向设备中写入double数组,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向设备中写入double数据,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向设备中写入字符串,编码格式为ASCII
数据地址
字符串数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向设备中写入指定长度的字符串,超出截断,不够补0,编码格式为ASCII
数据地址
字符串数据
指定的字符串长度,必须大于0
是否写入成功的结果对象 -> Whether to write a successful result object
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向设备中写入字符串,编码格式为Unicode
数据地址
字符串数据
是否写入成功的结果对象
向设备中写入指定长度的字符串,超出截断,不够补0,编码格式为Unicode
数据地址
字符串数据
指定的字符串长度,必须大于0
是否写入成功的结果对象 -> Whether to write a successful result object
释放当前的对象
是否托管对象
返回表示当前对象的字符串
字符串数据
设备类的基类,提供了基础的字节读写方法
指定了消息的解析规则
指定了数据转换的规则
需要继承实现采用使用。
从设备读取原始数据
起始地址
地址长度
带有成功标识的结果对象
需要在继承类中重写实现,并且实现地址解析操作
将原始数据写入设备
起始地址
原始数据
带有成功标识的结果对象
需要在继承类中重写实现,并且实现地址解析操作
单个数据字节的长度,西门子为2,三菱,欧姆龙,modbusTcp就为1,AB PLC无效
对设备来说,一个地址的数据对应的字节数,或是1个字节或是2个字节
读取自定义类型的数据,需要规定解析规则
类型名称
起始地址
带有成功标识的结果对象
需要是定义一个类,选择好相对于的ByteTransform实例,才能调用该方法。
此处演示三菱的读取示例,先定义一个类,实现接口
接下来就可以实现数据的读取了
写入自定义类型的数据到设备去,需要规定生成字节的方法
自定义类型
起始地址
实例对象
带有成功标识的结果对象
需要是定义一个类,选择好相对于的实例,才能调用该方法。
此处演示三菱的读取示例,先定义一个类,实现接口
接下来就可以实现数据的读取了
从设备里读取支持Hsl特性的数据内容,该特性为,详细参考论坛的操作说明。
自定义的数据类型对象
包含是否成功的结果对象
此处演示西门子的读取示例,先定义一个类,重点是将需要读取的数据,写入到属性的特性中去。
接下来就可以实现数据的读取了
从设备里读取支持Hsl特性的数据内容,该特性为,详细参考论坛的操作说明。
自定义的数据类型对象
包含是否成功的结果对象
此处演示西门子的读取示例,先定义一个类,重点是将需要读取的数据,写入到属性的特性中去。
接下来就可以实现数据的写入了
读取设备的short类型的数据
起始地址
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
读取设备的short类型的数组
起始地址
数组长度
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
读取设备的ushort数据类型的数据
起始地址
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
读取设备的ushort类型的数组
起始地址
数组长度
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
读取设备的int类型的数据
起始地址
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
读取设备的int类型的数组
起始地址
数组长度
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
读取设备的uint类型的数据
起始地址
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
读取设备的uint类型的数组
起始地址
数组长度
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
读取设备的float类型的数据
起始地址
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
读取设备的float类型的数组
起始地址
数组长度
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
读取设备的long类型的数据
起始地址
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
读取设备的long类型的数组
起始地址
数组长度
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
读取设备的ulong类型的数据
起始地址
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
读取设备的ulong类型的数组
起始地址
数组长度
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
读取设备的double类型的数据
起始地址
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
读取设备的double类型的数组
起始地址
数组长度
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
读取设备的字符串数据,编码为ASCII
起始地址
地址长度
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
读取设备的字符串数据,编码为指定的编码信息
起始地址
地址长度
编码机制
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
批量读取底层的数据信息,需要指定地址和长度,具体的结果取决于实现
数据地址
数据长度
带有成功标识的bool[]数组
读取底层的bool数据信息,具体的结果取决于实现
数据地址
带有成功标识的bool数组
写入bool数组数据
起始地址
写入值
带有成功标识的结果类对象
写入bool数据
起始地址
写入值
带有成功标识的结果类对象
批量读取底层的数据信息,需要指定地址和长度,具体的结果取决于实现
数据地址
数据长度
带有成功标识的bool[]数组
读取底层的bool数据信息,具体的结果取决于实现
数据地址
带有成功标识的bool数组
写入bool数组数据
起始地址
写入值
带有成功标识的结果类对象
写入bool数据
起始地址
写入值
带有成功标识的结果类对象
使用异步的操作从原始的设备中读取数据信息
起始地址
地址长度
带有成功标识的结果对象
异步读取设备的short类型的数据
起始地址
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步读取设备的ushort类型的数组
起始地址
数组长度
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步读取设备的ushort数据类型的数据
起始地址
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步读取设备的ushort类型的数组
起始地址
数组长度
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步读取设备的int类型的数据
起始地址
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步读取设备的int类型的数组
起始地址
数组长度
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步读取设备的uint类型的数据
起始地址
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步读取设备的uint类型的数组
起始地址
数组长度
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步读取设备的float类型的数据
起始地址
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步读取设备的float类型的数组
起始地址
数组长度
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步读取设备的long类型的数据
起始地址
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步读取设备的long类型的数组
起始地址
数组长度
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步读取设备的ulong类型的数据
起始地址
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步读取设备的ulong类型的数组
起始地址
数组长度
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步读取设备的double类型的数据
起始地址
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步读取设备的double类型的数组
起始地址
数组长度
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步读取设备的字符串数据,编码为ASCII
起始地址
地址长度
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
读取设备的字符串数据,编码为指定的编码信息
起始地址
地址长度
编码机制
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步将原始数据写入设备
起始地址
原始数据
带有成功标识的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步向设备中写入short数组,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步向设备中写入short数据,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步向设备中写入ushort数组,返回是否写入成功
要写入的数据地址
要写入的实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步向设备中写入ushort数据,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步向设备中写入int数组,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步向设备中写入int数据,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步向设备中写入uint数组,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步向设备中写入uint数据,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步向设备中写入float数组,返回是否写入成功
数据地址
实际数据
返回写入结果
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步向设备中写入float数据,返回是否写入成功
数据地址
实际数据
返回写入结果
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步向设备中写入long数组,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步向设备中写入long数据,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步向P设备中写入ulong数组,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步向设备中写入ulong数据,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步向设备中写入double数组,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步向设备中写入double数据,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步向设备中写入字符串,编码格式为ASCII
数据地址
字符串数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步向设备中写入字符串,使用指定的字符编码
数据地址
字符串数据
字符编码
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步向设备中写入指定长度的字符串,超出截断,不够补0,编码格式为ASCII
数据地址
字符串数据
指定的字符串长度,必须大于0
是否写入成功的结果对象 -> Whether to write a successful result object
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步向设备中写入指定长度的字符串,超出截断,不够补0,指定的编码格式
数据地址
字符串数据
指定的字符串长度,必须大于0
指定的编码格式
是否写入成功的结果对象 -> Whether to write a successful result object
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步向设备中写入字符串,编码格式为Unicode
数据地址
字符串数据
是否写入成功的结果对象
异步向设备中写入指定长度的字符串,超出截断,不够补0,编码格式为Unicode
数据地址
字符串数据
指定的字符串长度,必须大于0
是否写入成功的结果对象 -> Whether to write a successful result object
异步读取自定义类型的数据,需要规定解析规则
类型名称
起始地址
带有成功标识的结果对象
需要是定义一个类,选择好相对于的ByteTransform实例,才能调用该方法。
此处演示三菱的读取示例,先定义一个类,实现接口
接下来就可以实现数据的读取了
异步写入自定义类型的数据到设备去,需要规定生成字节的方法
自定义类型
起始地址
实例对象
带有成功标识的结果对象
需要是定义一个类,选择好相对于的实例,才能调用该方法。
此处演示三菱的读取示例,先定义一个类,实现接口
接下来就可以实现数据的读取了
异步从设备里读取支持Hsl特性的数据内容,该特性为,详细参考论坛的操作说明。
自定义的数据类型对象
包含是否成功的结果对象
此处演示西门子的读取示例,先定义一个类,重点是将需要读取的数据,写入到属性的特性中去。
接下来就可以实现数据的读取了
异步从设备里读取支持Hsl特性的数据内容,该特性为,详细参考论坛的操作说明。
自定义的数据类型对象
包含是否成功的结果对象
此处演示西门子的读取示例,先定义一个类,重点是将需要读取的数据,写入到属性的特性中去。
接下来就可以实现数据的写入了
向设备中写入short数组,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向设备中写入short数据,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向设备中写入ushort数组,返回是否写入成功
要写入的数据地址
要写入的实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向设备中写入ushort数据,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向设备中写入int数组,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向设备中写入int数据,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向设备中写入uint数组,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向设备中写入uint数据,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向设备中写入float数组,返回是否写入成功
数据地址
实际数据
返回写入结果
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向设备中写入float数据,返回是否写入成功
数据地址
实际数据
返回写入结果
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向设备中写入long数组,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向设备中写入long数据,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向P设备中写入ulong数组,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向设备中写入ulong数据,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向设备中写入double数组,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向设备中写入double数据,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向设备中写入字符串,编码格式为ASCII
数据地址
字符串数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向设备中写入指定编码的字符串
数据地址
字符串数据
字节编码
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向设备中写入指定长度的字符串,超出截断,不够补0,编码格式为ASCII
数据地址
字符串数据
指定的字符串长度,必须大于0
是否写入成功的结果对象 -> Whether to write a successful result object
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向设备中写入指定长度并且指定编码的字符串,超出截断,不够补0
数据地址
字符串数据
指定的长度,按照转换后的字节计算
字符编码
是否写入成功的结果对象 -> Whether to write a successful result object
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向设备中写入字符串,编码格式为Unicode
数据地址
字符串数据
是否写入成功的结果对象
向设备中写入指定长度的字符串,超出截断,不够补0,编码格式为Unicode
数据地址
字符串数据
指定的字符串长度,必须大于0
是否写入成功的结果对象 -> Whether to write a successful result object
返回表示当前对象的字符串
字符串数据
支持长连接,短连接两个模式的通用客户端基类 ->
Universal client base class that supports long connections and short connections to two modes
无,请使用继承类实例化,然后进行数据交互,当前的类并没有具体的实现。
默认的无参构造函数 -> Default no-parameter constructor
接收数据的超时时间
是否是长连接的状态
交互的混合锁
当前的socket是否发生了错误
当前客户端的数据变换机制,当你需要从字节数据转换类型数据的时候需要。->
The current client's data transformation mechanism is required when you need to convert type data from byte data.
主要是用来转换数据类型的,下面仅仅演示了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地址
最好实在初始化的时候进行指定,当使用短连接的时候,支持动态更改,切换;当使用长连接后,无法动态更改
以下举例modbus-tcp的短连接及动态更改ip地址的示例
获取或设置服务器的端口号
最好实在初始化的时候进行指定,当使用短连接的时候,支持动态更改,切换;当使用长连接后,无法动态更改
动态更改请参照IpAddress属性的更改。
当前连接的唯一ID号,默认为长度20的guid码加随机数组成,方便列表管理,也可以自己指定
Current Connection ID, conclude guid and random data, also, you can spcified
当前的异形连接对象,如果设置了异形连接的话
具体的使用方法请参照Demo项目中的异形modbus实现。
在读取数据之前可以调用本方法将客户端设置为长连接模式,相当于跳过了ConnectServer的结果验证,对异形客户端无效
以下的方式演示了另一种长连接的机制
切换短连接模式到长连接模式,后面的每次请求都共享一个通道
返回连接结果,如果失败的话(也即IsSuccess为False),包含失败信息
简单的连接示例,调用该方法后,连接设备,创建一个长连接的对象,后续的读写操作均公用一个连接对象。
如果想知道是否连接成功,请参照下面的代码。
使用指定的套接字创建异形客户端
异形客户端对象,查看类型创建的客户端
通常都为成功
简单的创建示例。
如果想知道是否创建成功。通常都是成功。
不能和之前的长连接和短连接混用,详细参考 Demo程序
在长连接模式下,断开服务器的连接,并切换到短连接模式
关闭连接,不需要查看IsSuccess属性查看
直接关闭连接即可,基本上是不需要进行成功的判定
连接上服务器后需要进行的初始化操作
网络套接字
是否初始化成功,依据具体的协议进行重写
有些协议不需要握手信号,比如三菱的MC协议,Modbus协议,西门子和欧姆龙就存在握手信息,此处的例子是继承本类后重写的西门子的协议示例
在将要和服务器进行断开的情况下额外的操作,需要根据对应协议进行重写
网络套接字
目前暂无相关的示例,组件支持的协议都不用实现这个方法。
当断开连接时额外的操作结果
和服务器交互完成的时候调用的方法,无论是成功或是失败,都将会调用,具体的操作需要重写实现
读取结果
是否使用账号登录
设置当前的登录的账户名和密码信息,账户名为空时设置不生效
账户名
密码
认证账号,将使用已经设置的用户名和密码进行账号认证。
套接字
认证结果
获取本次操作的可用的网络套接字
是否成功,如果成功,使用这个套接字
连接并初始化网络套接字
带有socket的结果对象
在其他指定的套接字上,使用报文来通讯,传入需要发送的消息,返回一条完整的数据指令
指定的套接字
发送的完整的报文信息
无锁的基于套接字直接进行叠加协议的操作。
假设你有一个自己的socket连接了设备,本组件可以直接基于该socket实现modbus读取,三菱读取,西门子读取等等操作,前提是该服务器支持多协议,虽然这个需求听上去比较变态,但本组件支持这样的操作。
接收的完整的报文信息
使用底层的数据报文来通讯,传入需要发送的消息,返回一条完整的数据指令
发送的完整的报文信息
接收的完整的报文信息
本方法用于实现本组件还未实现的一些报文功能,例如有些modbus服务器会有一些特殊的功能码支持,需要收发特殊的报文,详细请看示例
此处举例有个modbus服务器,有个特殊的功能码0x09,后面携带子数据0x01即可,发送字节为 0x00 0x00 0x00 0x00 0x00 0x03 0x01 0x09 0x01
释放当前的资源,并自动关闭长连接,如果设置了的话
是否释放托管的资源信息
释放当前的资源
返回表示当前对象的字符串
字符串信息
文件服务器类的基类,为直接映射文件模式和间接映射文件模式提供基础的方法支持
所有文件操作的词典锁
词典的锁
获取当前文件的读写锁,如果没有会自动创建
完整的文件路径
读写锁
接收本次操作的信息头数据
网络套接字
命令
文件名
第一大类
第二大类
第三大类
是否成功的结果对象
获取一个随机的文件名,由GUID码和随机数字组成
文件名
返回服务器的绝对路径
第一大类
第二大类
第三大类
是否成功的结果对象
返回服务器的绝对路径
第一大类
第二大类
第三大类
文件名
是否成功的结果对象
返回相对路径的名称
第一大类
第二大类
第三大类
文件名
是否成功的结果对象
移动一个文件到新的文件去
旧的文件名称
新的文件名称
是否成功
删除文件并回发确认信息,如果结果异常,则结束通讯
网络套接字
完整路径的文件名称
是否成功的结果对象
服务器启动时的操作
检查文件夹是否存在,不存在就创建
文件所存储的路径
获取文件夹的所有文件列表
第一大类
第二大类
第三大类
文件列表
获取文件夹的所有文件夹列表
第一大类
第二大类
第三大类
文件夹列表
获取本对象的字符串标识形式
对象信息
服务器程序的基础类
实例化一个默认的对象
服务器引擎是否启动
服务器的端口号
需要在服务器启动之前设置为有效
异步传入的连接申请请求
异步对象
用于登录的回调方法
socket对象
用于登录的回调方法
socket对象
远程的终结点
当客户端的socket登录的时候额外检查的信息
套接字
终结点
验证的结果
服务器启动时额外的初始化信息
需要在派生类中重写
启动服务器的引擎
指定一个端口号
使用已经配置好的端口启动服务器的引擎
服务器关闭的时候需要做的事情
关闭服务器的引擎
创建一个指定的异形客户端连接,使用Hsl协议来发送注册包
Ip地址
端口号
设备唯一ID号,最长11
是否成功连接
基础的Udp的通信对象
实例化一个默认的方法
Ip地址
端口号信息
接收反馈的超时时间
获取或设置一次接收时的数据长度,默认2KB数据长度,特殊情况的时候需要调整
核心的数据交互读取
完整的报文内容
是否成功的结果对象
Udp报文协议的内容传送
数据转换类型对象
实例化一个默认的对象
从设备读取原始数据
起始地址
地址长度
带有成功标识的结果对象
需要在继承类中重写实现,并且实现地址解析操作
将原始数据写入设备
起始地址
原始数据
带有成功标识的结果对象
需要在继承类中重写实现,并且实现地址解析操作
单个数据字节的长度,西门子为2,三菱,欧姆龙,modbusTcp就为1
对设备来说,一个地址的数据对应的字节数,或是1个字节或是2个字节
当前客户端的数据变换机制,当你需要从字节数据转换类型数据的时候需要。
主要是用来转换数据类型的,下面仅仅演示了2个方法,其他的类型转换,类似处理。
读取自定义类型的数据,需要规定解析规则
类型名称
起始地址
带有成功标识的结果对象
需要是定义一个类,选择好相对于的ByteTransform实例,才能调用该方法。
写入自定义类型的数据到设备去,需要规定生成字节的方法
自定义类型
起始地址
实例对象
带有成功标识的结果对象
需要是定义一个类,选择好相对于的实例,才能调用该方法。
从设备里读取支持Hsl特性的数据内容,该特性为,详细参考论坛的操作说明。
自定义的数据类型对象
包含是否成功的结果对象
从设备里读取支持Hsl特性的数据内容,该特性为,详细参考论坛的操作说明。
自定义的数据类型对象
包含是否成功的结果对象
读取设备的short类型的数据
起始地址
带成功标志的结果数据对象
读取设备的short类型的数组
起始地址
数组长度
带成功标志的结果数据对象
读取设备的ushort数据类型的数据
起始地址
带成功标志的结果数据对象
读取设备的ushort类型的数组
起始地址
数组长度
带成功标志的结果数据对象
读取设备的int类型的数据
起始地址
带成功标志的结果数据对象
读取设备的int类型的数组
起始地址
数组长度
带成功标志的结果数据对象
读取设备的uint类型的数据
起始地址
带成功标志的结果数据对象
读取设备的uint类型的数组
起始地址
数组长度
带成功标志的结果数据对象
读取设备的float类型的数据
起始地址
带成功标志的结果数据对象
读取设备的float类型的数组
起始地址
数组长度
带成功标志的结果数据对象
读取设备的long类型的数据
起始地址
带成功标志的结果数据对象
读取设备的long类型的数组
起始地址
数组长度
带成功标志的结果数据对象
读取设备的ulong类型的数据
起始地址
带成功标志的结果数据对象
读取设备的ulong类型的数组
起始地址
数组长度
带成功标志的结果数据对象
读取设备的double类型的数据
起始地址
带成功标志的结果数据对象
读取设备的double类型的数组
起始地址
数组长度
带成功标志的结果数据对象
读取设备的字符串数据,编码为ASCII
起始地址
地址长度
带成功标志的结果数据对象
批量读取底层的数据信息,需要指定地址和长度,具体的结果取决于实现
数据地址
数据长度
带有成功标识的bool[]数组
读取底层的bool数据信息,具体的结果取决于实现
数据地址
带有成功标识的bool数组
写入bool数组数据
起始地址
写入值
带有成功标识的结果类对象
写入bool数据
起始地址
写入值
带有成功标识的结果类对象
向设备中写入short数组,返回是否写入成功
数据地址
实际数据
返回写入结果
向设备中写入short数据,返回是否写入成功
数据地址
实际数据
返回写入结果
向设备中写入ushort数组,返回是否写入成功
要写入的数据地址
要写入的实际数据
返回写入结果
向设备中写入ushort数据,返回是否写入成功
数据地址
实际数据
返回写入结果
向设备中写入int数组,返回是否写入成功
数据地址
实际数据
返回写入结果
向设备中写入int数据,返回是否写入成功
数据地址
实际数据
返回写入结果
向设备中写入uint数组,返回是否写入成功
数据地址
实际数据
返回写入结果
向设备中写入uint数据,返回是否写入成功
数据地址
实际数据
返回写入结果
向设备中写入float数组,返回是否写入成功
数据地址
实际数据
返回写入结果
向设备中写入float数据,返回是否写入成功
数据地址
实际数据
返回写入结果
向设备中写入long数组,返回是否写入成功
数据地址
实际数据
返回写入结果
向设备中写入long数据,返回是否写入成功
数据地址
实际数据
返回写入结果
向P设备中写入ulong数组,返回是否写入成功
数据地址
实际数据
返回写入结果
向设备中写入ulong数据,返回是否写入成功
数据地址
实际数据
返回写入结果
向设备中写入double数组,返回是否写入成功
数据地址
实际数据
返回写入结果
向设备中写入double数据,返回是否写入成功
数据地址
实际数据
返回写入结果
向设备中写入字符串,编码格式为ASCII
数据地址
字符串数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向设备中写入指定长度的字符串,超出截断,不够补0,编码格式为ASCII
数据地址
字符串数据
指定的字符串长度,必须大于0
是否写入成功的结果对象 -> Whether to write a successful result object
向设备中写入字符串,编码格式为Unicode
数据地址
字符串数据
是否写入成功的结果对象
向设备中写入指定长度的字符串,超出截断,不够补0,编码格式为Unicode
数据地址
字符串数据
指定的字符串长度,必须大于0
是否写入成功的结果对象 -> Whether to write a successful result object
批量读取底层的数据信息,需要指定地址和长度,具体的结果取决于实现
数据地址
数据长度
带有成功标识的bool[]数组
读取底层的bool数据信息,具体的结果取决于实现
数据地址
带有成功标识的bool数组
写入bool数组数据
起始地址
写入值
带有成功标识的结果类对象
写入bool数据
起始地址
写入值
带有成功标识的结果类对象
使用异步的操作从原始的设备中读取数据信息
起始地址
地址长度
带有成功标识的结果对象
异步读取设备的short类型的数据
起始地址
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步读取设备的ushort类型的数组
起始地址
数组长度
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步读取设备的ushort数据类型的数据
起始地址
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步读取设备的ushort类型的数组
起始地址
数组长度
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步读取设备的int类型的数据
起始地址
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步读取设备的int类型的数组
起始地址
数组长度
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步读取设备的uint类型的数据
起始地址
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步读取设备的uint类型的数组
起始地址
数组长度
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步读取设备的float类型的数据
起始地址
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步读取设备的float类型的数组
起始地址
数组长度
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步读取设备的long类型的数据
起始地址
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步读取设备的long类型的数组
起始地址
数组长度
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步读取设备的ulong类型的数据
起始地址
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步读取设备的ulong类型的数组
起始地址
数组长度
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步读取设备的double类型的数据
起始地址
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步读取设备的double类型的数组
起始地址
数组长度
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步读取设备的字符串数据,编码为ASCII
起始地址
地址长度
带成功标志的结果数据对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步将原始数据写入设备
起始地址
原始数据
带有成功标识的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步向设备中写入short数组,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步向设备中写入short数据,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步向设备中写入ushort数组,返回是否写入成功
要写入的数据地址
要写入的实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步向设备中写入ushort数据,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步向设备中写入int数组,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步向设备中写入int数据,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步向设备中写入uint数组,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步向设备中写入uint数据,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步向设备中写入float数组,返回是否写入成功
数据地址
实际数据
返回写入结果
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步向设备中写入float数据,返回是否写入成功
数据地址
实际数据
返回写入结果
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步向设备中写入long数组,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步向设备中写入long数据,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步向P设备中写入ulong数组,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步向设备中写入ulong数据,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步向设备中写入double数组,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步向设备中写入double数据,返回是否写入成功
数据地址
实际数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步向设备中写入字符串,编码格式为ASCII
数据地址
字符串数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步向设备中写入指定长度的字符串,超出截断,不够补0,编码格式为ASCII
数据地址
字符串数据
指定的字符串长度,必须大于0
是否写入成功的结果对象 -> Whether to write a successful result object
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
异步向设备中写入字符串,编码格式为Unicode
数据地址
字符串数据
是否写入成功的结果对象
异步向设备中写入指定长度的字符串,超出截断,不够补0,编码格式为Unicode
数据地址
字符串数据
指定的字符串长度,必须大于0
是否写入成功的结果对象 -> Whether to write a successful result object
异步读取自定义类型的数据,需要规定解析规则
类型名称
起始地址
带有成功标识的结果对象
需要是定义一个类,选择好相对于的ByteTransform实例,才能调用该方法。
此处演示三菱的读取示例,先定义一个类,实现接口
接下来就可以实现数据的读取了
异步写入自定义类型的数据到设备去,需要规定生成字节的方法
自定义类型
起始地址
实例对象
带有成功标识的结果对象
需要是定义一个类,选择好相对于的实例,才能调用该方法。
此处演示三菱的读取示例,先定义一个类,实现接口
接下来就可以实现数据的读取了
异步从设备里读取支持Hsl特性的数据内容,该特性为,详细参考论坛的操作说明。
自定义的数据类型对象
包含是否成功的结果对象
异步从设备里读取支持Hsl特性的数据内容,该特性为,详细参考论坛的操作说明。
自定义的数据类型对象
包含是否成功的结果对象
返回表示当前对象的字符串
字符串信息
包含了主动异步接收的方法实现和文件类异步读写的实现
默认的无参构造方法
发送数据的方法
通信用的核心对象
完整的字节信息
发送回发方法
异步对象
重新开始接收下一次的数据传递
网络状态
是否触发数据处理
指令头接收方法
异步状态信息
数据内容接收方法
[自校验] 将文件数据发送至套接字,如果结果异常,则结束通讯
网络套接字
完整的文件路径
文件的长度
进度报告器
是否发送成功
[自校验] 将文件数据发送至套接字,具体发送细节将在继承类中实现,如果结果异常,则结束通讯
套接字
文件名称,文件必须存在
远程端的文件名称
文件的额外标签
文件的上传人
发送进度报告
是否发送成功
[自校验] 将流数据发送至套接字,具体发送细节将在继承类中实现,如果结果异常,则结束通讯
套接字
文件名称,文件必须存在
远程端的文件名称
文件的额外标签
文件的上传人
发送进度报告
是否成功的结果对象
[自校验] 从套接字中接收文件头信息
套接字的网络
包含文件信息的结果对象
[自校验] 从网络中接收一个文件,如果结果异常,则结束通讯
网络套接字
接收文件后保存的文件名
接收进度报告
包含文件信息的结果对象
[自校验] 从网络中接收一个文件,写入数据流,如果结果异常,则结束通讯,参数顺序文件名,文件大小,文件标识,上传人
网络套接字
等待写入的数据流
接收进度报告
删除文件的操作
预处理文件夹的名称,除去文件夹名称最后一个'\',如果有的话
文件夹名称
数据处理中心,应该继承重写
连接状态
协议头
用户自定义
数据内容
接收出错的时候进行处理
会话内容
异常信息
当远端的客户端关闭连接时触发
会话信息
发送一个流的所有数据到网络套接字
套接字
内存流
发送的数据长度
进度报告的委托
进度报告是否按照百分比报告
是否成功的结果对象
从套接字中接收所有的数据然后写入到流当中去
套接字
数据流
所有数据的长度
进度报告
进度报告是否按照百分比
是否成功的结果对象
获取本对象的字符串表示形式
字符串信息
异形客户端的异步对象
实例化一个默认的参数
网络套接字
唯一的标识
指示当前的网络状态
网络会话信息
实例化一个构造方法
传输数据的对象
IP地址
此连接对象连接的远程客户端
远程对象的别名
心跳验证的时间点
客户端的类型
客户端唯一的标识
UDP通信中的远程端
指令头缓存
已经接收的指令头长度
数据内容缓存
已经接收的数据内容长度
用于关键字分类使用
清除本次的接收内容
返回表示当前对象的字符串,以IP,端口,客户端名称组成
字符串数据
传输数据的对象
发送的数据内容
已经发送长度
关键字
客户端的标识
文件传送的异步对象
操作的流
网络中的异步对象
实例化一个对象
实例化一个对象,指定接收或是发送的数据长度
数据长度
唯一的一串信息
网络套接字
是否关闭了通道
清空旧的数据
携带TaskCompletionSource属性的异步对象
类型
实例化一个对象
实例化一个对象,指定接收或是发送的数据长度
数据长度
异步消息的对象
本次接收或是发送的数据长度
已经处理的字节长度
操作完成的信号
缓存器
是否发生了错误
错误消息
静态的方法支持类,提供一些网络的静态支持,支持从套接字从同步接收指定长度的字节数据,并支持报告进度。
在接收指定数量的字节数据的时候,如果一直接收不到,就会发生假死的状态。接收的数据时保存在内存里的,不适合大数据块的接收。
一个接收的示例
Socket传输中的缓冲池大小
检查是否超时的静态方法
数据封送对象
超时的时间
检查是否超时的方法信息
socket对象
读取socket数据的基础方法,只适合用来接收指令头,或是同步数据
通信对象
接收的长度
接收到的字节数据
接收数据的举例,简单的接收20个字节长度的数据。
如何接收不定长度的数据呢?我们可以将一条数据拆分成2次接收,第一次是接收8个固定的字节,解析成长度,再接收真实的数据。
读取socket数据的基础方法,只适合用来接收指令头,或是同步数据
通信对象
接收的长度
用于报告接收进度的对象
是否按照百分比报告进度
是否回发接收数据长度
接收到的字节数据
接收数据的举例,输出报告,不根据百分比来产生报告,不回复接收进度。
接收一行命令数据,需要自己指定这个结束符
网络套接字
结束符信息
带有结果对象的数据信息
接收一行命令数据,需要自己指定这个结束符
网络套接字
结束符1信息
结束符2信息
带有结果对象的数据信息
从socket套接字读取数据并写入流中,必然报告进度
通信对象
stream
接收的长度
用于报告接收进度的对象
是否按照百分比报告进度
举例从socket读取数据,然后写入到文件流中
读取流并将数据写入socket
文件流
连接的套接字
返回的文件长度
发送的进度报告
是否按照百分比报告进度
举例从文件读取数据,然后写入到套接字中,相当于发送文件到socket
反射的辅助类
从设备里读取支持Hsl特性的数据内容,该特性为,详细参考论坛的操作说明。
自定义的数据类型对象
读写接口的实现
包含是否成功的结果对象
从设备里读取支持Hsl特性的数据内容,该特性为,详细参考论坛的操作说明。
自定义的数据类型对象
自定义的数据对象
数据读写对象
包含是否成功的结果对象
线程的协调逻辑状态
所有项完成
超时
任务取消
一个线程协调逻辑类,详细参考书籍《CLR Via C#》page:681
这个类可惜没有报告进度的功能
每次的操作任务开始前必须调用该方法
在一次任务处理好操作之后,必须调用该方法
该方法必须在发起所有的操作之后调用
回调方法
超时时间
超时的方法
取消任务的执行
生成一次报告
报告的状态
乐观的并发方法模型,具体参照《CLR Via C#》page:686
唯一的目标数据
修改数据的算法
一个用于高性能,乐观并发模型控制操作的类,允许一个方法(隔离方法)的安全单次执行
实例化一个对象,需要传入隔离执行的方法
隔离执行的方法
操作状态,0是未操作,1是操作中
需要操作的次数
启动线程池执行隔离方法
一个高性能的读写锁,支持写锁定,读灵活,读时写锁定,写时读锁定
返回本对象的描述字符串
对象的描述字符串
实例化一个读写锁的对象
释放资源
根据读写情况请求锁
True为写请求,False为读请求
释放锁,将根据锁状态自动区分读写锁
一个简单的混合线程同步锁,采用了基元用户加基元内核同步构造实现
以下演示常用的锁的使用方式,还包含了如何优雅的处理异常锁
释放资源
基元用户模式构造同步锁
基元内核模式构造同步锁
获取锁
离开锁
获取当前锁是否在等待当中
一个用于多线程并发处理数据的模型类,适用于处理数据量非常庞大的情况
等待处理的数据类型
实例化一个数据处理对象
数据处理列表
数据操作方法,应该是相对耗时的任务
需要使用的线程数
操作总数,判定操作是否完成
判断是否所有的线程是否处理完成
准备启动的处理数据的线程数量
指示多线程处理是否在运行中,防止冗余调用
列表数据
需要操作的方法
一个双参数委托
用于报告进度的委托,当finish等于count时,任务完成
已完成操作数量
总数量
成功数量
失败数量
异常发生时事件
报告处理进度时发生
已处理完成数量,无论是否异常
处理完成并实现操作数量
处理过程中异常数量
用于触发事件的混合线程锁
指示处理状态是否为暂停状态
指示系统是否需要强制退出
在发生错误的时候是否强制退出后续的操作
启动多线程进行数据处理
暂停当前的操作
恢复暂停的操作
直接手动强制结束操作
在发生错误的时候是否强制退出后续的操作
一个双检锁的示例,适合一些占内存的静态数据对象,获取的时候才实例化真正的对象
一个高级的混合线程同步锁,采用了基元用户加基元内核同步构造实现,并包含了自旋和线程所有权
释放资源
基元用户模式构造同步锁
基元内核模式构造同步锁
控制自旋的一个字段
指出哪个线程拥有锁
指示锁拥有了多少次
获取锁
离开锁
数据转换类的基础,提供了一些基础的方法实现.
实例化一个默认的对象
使用指定的数据解析来实例化对象
数据规则
从缓存中提取出bool结果
缓存数据
位的索引
bool对象
从缓存中提取出bool数组结果
缓存数据
位的索引
bool长度
bool数组
从缓存中提取byte结果
缓存数据
索引位置
byte对象
从缓存中提取byte数组结果
缓存数据
索引位置
读取的数组长度
byte数组对象
从缓存中提取short结果
缓存数据
索引位置
short对象
从缓存中提取short数组结果
缓存数据
索引位置
读取的数组长度
short数组对象
从缓存中提取ushort结果
缓存数据
索引位置
ushort对象
从缓存中提取ushort数组结果
缓存数据
索引位置
读取的数组长度
ushort数组对象
从缓存中提取int结果
缓存数据
索引位置
int对象
从缓存中提取int数组结果
缓存数据
索引位置
读取的数组长度
int数组对象
从缓存中提取uint结果
缓存数据
索引位置
uint对象
从缓存中提取uint数组结果
缓存数据
索引位置
读取的数组长度
uint数组对象
从缓存中提取long结果
缓存数据
索引位置
long对象
从缓存中提取long数组结果
缓存数据
索引位置
读取的数组长度
long数组对象
从缓存中提取ulong结果
缓存数据
索引位置
ulong对象
从缓存中提取ulong数组结果
缓存数据
索引位置
读取的数组长度
ulong数组对象
从缓存中提取float结果
缓存对象
索引位置
float对象
从缓存中提取float数组结果
缓存数据
索引位置
读取的数组长度
float数组对象
从缓存中提取double结果
缓存对象
索引位置
double对象
从缓存中提取double数组结果
缓存对象
索引位置
读取的数组长度
double数组对象
从缓存中提取string结果,使用指定的编码
缓存对象
索引位置
byte数组长度
字符串的编码
string对象
bool变量转化缓存数据
等待转化的数据
buffer数据
bool数组变量转化缓存数据
等待转化的数组
buffer数据
byte变量转化缓存数据
等待转化的数据
buffer数据
short变量转化缓存数据
等待转化的数据
buffer数据
short数组变量转化缓存数据
等待转化的数组
buffer数据
ushort变量转化缓存数据
等待转化的数据
buffer数据
ushort数组变量转化缓存数据
等待转化的数组
buffer数据
int变量转化缓存数据
等待转化的数据
buffer数据
int数组变量转化缓存数据
等待转化的数组
buffer数据
uint变量转化缓存数据
等待转化的数据
buffer数据
uint数组变量转化缓存数据
等待转化的数组
buffer数据
long变量转化缓存数据
等待转化的数据
buffer数据
long数组变量转化缓存数据
等待转化的数组
buffer数据
ulong变量转化缓存数据
等待转化的数据
buffer数据
ulong数组变量转化缓存数据
等待转化的数组
buffer数据
float变量转化缓存数据
等待转化的数据
buffer数据
float数组变量转化缓存数据
等待转化的数组
buffer数据
double变量转化缓存数据
等待转化的数据
buffer数据
double数组变量转化缓存数据
等待转化的数组
buffer数据
使用指定的编码字符串转化缓存数据
等待转化的数据
字符串的编码方式
buffer数据
反转多字节的数据信息
数据字节
起始索引,默认值为0
实际字节信息
反转多字节的数据信息
数据字节
起始索引,默认值为0
实际字节信息
获取或设置数据解析的格式,默认DCBA,也即是无修改,可选ABCD,BADC,CDAB,DCBA格式,对于Modbus协议来说,默认ABCD
所有数据转换类的静态辅助方法
Static helper method for all data conversion classes
结果转换操作的基础方法,需要支持类型,及转换的委托
结果类型
源
实际转换的委托
转换结果
结果转换操作的基础方法,需要支持类型,及转换的委托
结果类型
源结果
转换结果
应用于多字节数据的解析或是生成格式
按照顺序排序
按照单字反转
按照双字反转
按照倒序排序
支持转换器的基础接口
从缓存中提取出bool结果
缓存数据
位的索引
bool对象
从缓存中提取出bool数组结果
缓存数据
位的索引
bool长度
bool数组
从缓存中提取byte结果
缓存数据
索引位置
byte对象
从缓存中提取byte数组结果
缓存数据
索引位置
读取的数组长度
从缓存中提取short结果
缓存数据
索引位置
short对象
从缓存中提取short数组结果
缓存数据
索引位置
读取的数组长度
short数组对象
从缓存中提取ushort结果
缓存数据
索引位置
ushort对象
从缓存中提取ushort数组结果
缓存数据
索引位置
读取的数组长度
ushort数组对象
从缓存中提取int结果
缓存数据
索引位置
int对象
从缓存中提取int数组结果
缓存数据
索引位置
读取的数组长度
int数组对象
从缓存中提取uint结果
缓存数据
索引位置
uint对象
从缓存中提取uint数组结果
缓存数据
索引位置
读取的数组长度
uint数组对象
从缓存中提取long结果
缓存数据
索引位置
long对象
从缓存中提取long数组结果
缓存数据
索引位置
读取的数组长度
long数组对象
从缓存中提取ulong结果
缓存数据
索引位置
ulong对象
从缓存中提取ulong数组结果
缓存数据
索引位置
读取的数组长度
ulong数组对象
从缓存中提取float结果
缓存对象
索引位置
float对象
从缓存中提取float数组结果
缓存数据
索引位置
读取的数组长度
从缓存中提取double结果
缓存对象
索引位置
double对象
从缓存中提取double数组结果
缓存对象
索引位置
读取的数组长度
从缓存中提取string结果,使用指定的编码
缓存对象
索引位置
byte数组长度
字符串的编码
string对象
bool变量转化缓存数据
等待转化的数据
buffer数据
bool数组变量转化缓存数据
等待转化的数组
buffer数据
byte变量转化缓存数据
等待转化的数据
buffer数据
short变量转化缓存数据
等待转化的数据
buffer数据
short数组变量转化缓存数据
等待转化的数组
buffer数据
ushort变量转化缓存数据
等待转化的数据
buffer数据
ushort数组变量转化缓存数据
等待转化的数组
buffer数据
int变量转化缓存数据
等待转化的数据
buffer数据
int数组变量转化缓存数据
等待转化的数组
buffer数据
uint变量转化缓存数据
等待转化的数据
buffer数据
uint数组变量转化缓存数据
等待转化的数组
buffer数据
long变量转化缓存数据
等待转化的数据
buffer数据
long数组变量转化缓存数据
等待转化的数组
buffer数据
ulong变量转化缓存数据
等待转化的数据
buffer数据
ulong数组变量转化缓存数据
等待转化的数组
buffer数据
float变量转化缓存数据
等待转化的数据
buffer数据
float数组变量转化缓存数据
等待转化的数组
buffer数据
double变量转化缓存数据
等待转化的数据
buffer数据
double数组变量转化缓存数据
等待转化的数组
buffer数据
使用指定的编码字符串转化缓存数据
等待转化的数据
字符串的编码方式
buffer数据
获取或设置数据解析的格式,默认ABCD,可选BADC,CDAB,DCBA格式
常规的字节转换类
实例化一个默认的对象
使用指定的解析规则来初始化对象
解析规则
字节倒序的转换类
实例化一个默认的对象
使用指定的数据解析来实例化对象
数据规则
从缓存中提取short结果
缓存数据
索引位置
short对象
从缓存中提取ushort结果
缓存数据
索引位置
ushort对象
从缓存中提取int结果
缓存数据
索引位置
int对象
从缓存中提取uint结果
缓存数据
索引位置
uint对象
从缓存中提取long结果
缓存数据
索引位置
long对象
从缓存中提取ulong结果
缓存数据
索引位置
ulong对象
从缓存中提取float结果
缓存对象
索引位置
float对象
从缓存中提取double结果
缓存对象
索引位置
double对象
short数组变量转化缓存数据
等待转化的数组
buffer数据
ushort数组变量转化缓存数据
等待转化的数组
buffer数据
int数组变量转化缓存数据
等待转化的数组
buffer数据
uint数组变量转化缓存数据
等待转化的数组
buffer数据
long数组变量转化缓存数据
等待转化的数组
buffer数据
ulong数组变量转化缓存数据
等待转化的数组
buffer数据
float数组变量转化缓存数据
等待转化的数组
buffer数据
double数组变量转化缓存数据
等待转化的数组
buffer数据
按照字节错位的数据转换类
实例化一个默认的对象
使用指定的数据解析来实例化对象
数据规则
按照字节错位的方法
实际的字节数据
起始字节位置
数据长度
处理过的数据信息
字符串数据是否按照字来反转
从缓存中提取short结果
缓存数据
索引位置
short对象
从缓存中提取ushort结果
缓存数据
索引位置
ushort对象
从缓存中提取string结果,使用指定的编码
缓存对象
索引位置
byte数组长度
字符串的编码
string对象
short数组变量转化缓存数据
等待转化的数组
buffer数据
ushort数组变量转化缓存数据
等待转化的数组
buffer数据
使用指定的编码字符串转化缓存数据
等待转化的数据
字符串的编码方式
buffer数据
证书等级
只允许读取数据的等级
允许同时读写数据的等级
饼图的基本元素
实例化一个饼图基本元素的对象
名称
值
背景颜色
用于网络传递的信息头,使用上等同于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地址
数据的地址信息
数据长度
实例化一个地址特性,指定地址信息
真实的地址信息
实例化一个地址特性,指定地址信息
真实的地址信息
设备的地址信息
实例化一个地址特性,指定地址信息和数据长度,通常应用于数组的批量读取
真实的地址信息
读取的数据长度
实例化一个地址特性,指定地址信息和数据长度,通常应用于数组的批量读取
真实的地址信息
读取的数据长度
设备类型
加密方法,只对当前的程序集开放
等待加密的数据
加密后的字节数据
解密方法,只对当前的程序集开放
等待解密的数据
解密后的字节数据
超时操作的类 [a class use to indicate the time-out of the connection]
实例化对象
操作的开始时间
操作是否成功
延时的时间,单位毫秒
连接超时用的Socket
用于超时执行的方法
当前对象判断的同步锁
用于PLC通讯及ModBus自定义数据类型的读写操作
主要应用于设备实现设备类的自定义的数据类型读写,以此达到简化代码的操作,但是有一个前提,该数据处于连续的数据区块
此处举例读取三菱的自定义的数据,先实现接口,然后再读写操作
接下来就可以实现数据的读取了
读取的数据长度,对于西门子,等同于字节数,对于三菱和Modbus为字节数的一半
从字节数组进行解析实际的对象
从远程读取的数据源
将对象生成字符源,写入PLC中
准备写入到远程的数据
操作结果的类,只带有成功标志和错误信息 -> The class that operates the result, with only success flags and error messages
当 为 True 时,忽略 及 的值
实例化一个默认的结果对象
使用指定的消息实例化一个默认的结果对象
错误消息
使用错误代码,消息文本来实例化对象
错误代码
错误消息
指示本次访问是否成功
具体的错误描述
具体的错误代码
获取错误代号及文本描述
包含错误码及错误消息
从另一个结果类中拷贝错误信息
支持结果类及派生类
结果类及派生类的对象
创建并返回一个失败的结果对象,该对象复制另一个结果对象的错误信息
目标数据类型
之前的结果对象
带默认泛型对象的失败结果类
创建并返回一个失败的结果对象,该对象复制另一个结果对象的错误信息
目标数据类型一
目标数据类型二
之前的结果对象
带默认泛型对象的失败结果类
创建并返回一个失败的结果对象,该对象复制另一个结果对象的错误信息
目标数据类型一
目标数据类型二
目标数据类型三
之前的结果对象
带默认泛型对象的失败结果类
创建并返回一个失败的结果对象,该对象复制另一个结果对象的错误信息
目标数据类型一
目标数据类型二
目标数据类型三
目标数据类型四
之前的结果对象
带默认泛型对象的失败结果类
创建并返回一个失败的结果对象,该对象复制另一个结果对象的错误信息
目标数据类型一
目标数据类型二
目标数据类型三
目标数据类型四
目标数据类型五
之前的结果对象
带默认泛型对象的失败结果类
创建并返回一个失败的结果对象,该对象复制另一个结果对象的错误信息
目标数据类型一
目标数据类型二
目标数据类型三
目标数据类型四
目标数据类型五
目标数据类型六
之前的结果对象
带默认泛型对象的失败结果类
创建并返回一个失败的结果对象,该对象复制另一个结果对象的错误信息
目标数据类型一
目标数据类型二
目标数据类型三
目标数据类型四
目标数据类型五
目标数据类型六
目标数据类型七
之前的结果对象
带默认泛型对象的失败结果类
创建并返回一个失败的结果对象,该对象复制另一个结果对象的错误信息
目标数据类型一
目标数据类型二
目标数据类型三
目标数据类型四
目标数据类型五
目标数据类型六
目标数据类型七
目标数据类型八
之前的结果对象
带默认泛型对象的失败结果类
创建并返回一个失败的结果对象,该对象复制另一个结果对象的错误信息
目标数据类型一
目标数据类型二
目标数据类型三
目标数据类型四
目标数据类型五
目标数据类型六
目标数据类型七
目标数据类型八
目标数据类型九
之前的结果对象
带默认泛型对象的失败结果类
创建并返回一个失败的结果对象,该对象复制另一个结果对象的错误信息
目标数据类型一
目标数据类型二
目标数据类型三
目标数据类型四
目标数据类型五
目标数据类型六
目标数据类型七
目标数据类型八
目标数据类型九
目标数据类型十
之前的结果对象
带默认泛型对象的失败结果类
创建并返回一个成功的结果对象
成功的结果对象
创建并返回一个成功的结果对象,并带有一个参数对象
参数类型
类型的值对象
成功的结果对象
创建并返回一个成功的结果对象,并带有两个参数对象
第一个参数类型
第二个参数类型
类型一对象
类型二对象
成的结果对象
创建并返回一个成功的结果对象,并带有三个参数对象
第一个参数类型
第二个参数类型
第三个参数类型
类型一对象
类型二对象
类型三对象
成的结果对象
创建并返回一个成功的结果对象,并带有四个参数对象
第一个参数类型
第二个参数类型
第三个参数类型
第四个参数类型
类型一对象
类型二对象
类型三对象
类型四对象
成的结果对象
创建并返回一个成功的结果对象,并带有五个参数对象
第一个参数类型
第二个参数类型
第三个参数类型
第四个参数类型
第五个参数类型
类型一对象
类型二对象
类型三对象
类型四对象
类型五对象
成的结果对象
创建并返回一个成功的结果对象,并带有六个参数对象
第一个参数类型
第二个参数类型
第三个参数类型
第四个参数类型
第五个参数类型
第六个参数类型
类型一对象
类型二对象
类型三对象
类型四对象
类型五对象
类型六对象
成的结果对象
创建并返回一个成功的结果对象,并带有七个参数对象
第一个参数类型
第二个参数类型
第三个参数类型
第四个参数类型
第五个参数类型
第六个参数类型
第七个参数类型
类型一对象
类型二对象
类型三对象
类型四对象
类型五对象
类型六对象
类型七对象
成的结果对象
创建并返回一个成功的结果对象,并带有八个参数对象
第一个参数类型
第二个参数类型
第三个参数类型
第四个参数类型
第五个参数类型
第六个参数类型
第七个参数类型
第八个参数类型
类型一对象
类型二对象
类型三对象
类型四对象
类型五对象
类型六对象
类型七对象
类型八对象
成的结果对象
创建并返回一个成功的结果对象,并带有九个参数对象
第一个参数类型
第二个参数类型
第三个参数类型
第四个参数类型
第五个参数类型
第六个参数类型
第七个参数类型
第八个参数类型
第九个参数类型
类型一对象
类型二对象
类型三对象
类型四对象
类型五对象
类型六对象
类型七对象
类型八对象
类型九对象
成的结果对象
创建并返回一个成功的结果对象,并带有十个参数对象
第一个参数类型
第二个参数类型
第三个参数类型
第四个参数类型
第五个参数类型
第六个参数类型
第七个参数类型
第八个参数类型
第九个参数类型
第十个参数类型
类型一对象
类型二对象
类型三对象
类型四对象
类型五对象
类型六对象
类型七对象
类型八对象
类型九对象
类型十对象
成的结果对象
操作结果的泛型类,允许带一个用户自定义的泛型对象,推荐使用这个类
泛型类
实例化一个默认的结果对象
使用指定的消息实例化一个默认的结果对象
错误消息
使用错误代码,消息文本来实例化对象
错误代码
错误消息
用户自定义的泛型数据
操作结果的泛型类,允许带两个用户自定义的泛型对象,推荐使用这个类
泛型类
泛型类
实例化一个默认的结果对象
使用指定的消息实例化一个默认的结果对象
错误消息
使用错误代码,消息文本来实例化对象
错误代码
错误消息
用户自定义的泛型数据1
用户自定义的泛型数据2
操作结果的泛型类,允许带三个用户自定义的泛型对象,推荐使用这个类
泛型类
泛型类
泛型类
实例化一个默认的结果对象
使用指定的消息实例化一个默认的结果对象
错误消息
使用错误代码,消息文本来实例化对象
错误代码
错误消息
用户自定义的泛型数据1
用户自定义的泛型数据2
用户自定义的泛型数据3
操作结果的泛型类,允许带四个用户自定义的泛型对象,推荐使用这个类
泛型类
泛型类
泛型类
泛型类
实例化一个默认的结果对象
使用指定的消息实例化一个默认的结果对象
错误消息
使用错误代码,消息文本来实例化对象
错误代码
错误消息
用户自定义的泛型数据1
用户自定义的泛型数据2
用户自定义的泛型数据3
用户自定义的泛型数据4
操作结果的泛型类,允许带五个用户自定义的泛型对象,推荐使用这个类
泛型类
泛型类
泛型类
泛型类
泛型类
实例化一个默认的结果对象
使用指定的消息实例化一个默认的结果对象
错误消息
使用错误代码,消息文本来实例化对象
错误代码
错误消息
用户自定义的泛型数据1
用户自定义的泛型数据2
用户自定义的泛型数据3
用户自定义的泛型数据4
用户自定义的泛型数据5
操作结果的泛型类,允许带六个用户自定义的泛型对象,推荐使用这个类
泛型类
泛型类
泛型类
泛型类
泛型类
泛型类
实例化一个默认的结果对象
使用指定的消息实例化一个默认的结果对象
错误消息
使用错误代码,消息文本来实例化对象
错误代码
错误消息
用户自定义的泛型数据1
用户自定义的泛型数据2
用户自定义的泛型数据3
用户自定义的泛型数据4
用户自定义的泛型数据5
用户自定义的泛型数据5
操作结果的泛型类,允许带七个用户自定义的泛型对象,推荐使用这个类
泛型类
泛型类
泛型类
泛型类
泛型类
泛型类
泛型类
实例化一个默认的结果对象
使用指定的消息实例化一个默认的结果对象
错误消息
使用错误代码,消息文本来实例化对象
错误代码
错误消息
用户自定义的泛型数据1
用户自定义的泛型数据2
用户自定义的泛型数据3
用户自定义的泛型数据4
用户自定义的泛型数据5
用户自定义的泛型数据6
用户自定义的泛型数据7
操作结果的泛型类,允许带八个用户自定义的泛型对象,推荐使用这个类
泛型类
泛型类
泛型类
泛型类
泛型类
泛型类
泛型类
泛型类
实例化一个默认的结果对象
使用指定的消息实例化一个默认的结果对象
错误消息
使用错误代码,消息文本来实例化对象
错误代码
错误消息
用户自定义的泛型数据1
用户自定义的泛型数据2
用户自定义的泛型数据3
用户自定义的泛型数据4
用户自定义的泛型数据5
用户自定义的泛型数据6
用户自定义的泛型数据7
用户自定义的泛型数据8
操作结果的泛型类,允许带九个用户自定义的泛型对象,推荐使用这个类
泛型类
泛型类
泛型类
泛型类
泛型类
泛型类
泛型类
泛型类
泛型类
实例化一个默认的结果对象
使用指定的消息实例化一个默认的结果对象
错误消息
使用错误代码,消息文本来实例化对象
错误代码
错误消息
用户自定义的泛型数据1
用户自定义的泛型数据2
用户自定义的泛型数据3
用户自定义的泛型数据4
用户自定义的泛型数据5
用户自定义的泛型数据6
用户自定义的泛型数据7
用户自定义的泛型数据8
用户自定义的泛型数据9
操作结果的泛型类,允许带十个用户自定义的泛型对象,推荐使用这个类
泛型类
泛型类
泛型类
泛型类
泛型类
泛型类
泛型类
泛型类
泛型类
泛型类
实例化一个默认的结果对象
使用指定的消息实例化一个默认的结果对象
错误消息
使用错误代码,消息文本来实例化对象
错误代码
错误消息
用户自定义的泛型数据1
用户自定义的泛型数据2
用户自定义的泛型数据3
用户自定义的泛型数据4
用户自定义的泛型数据5
用户自定义的泛型数据6
用户自定义的泛型数据7
用户自定义的泛型数据8
用户自定义的泛型数据9
用户自定义的泛型数据10
一个基于异步高性能的客户端网络类,支持主动接收服务器的消息
详细的使用说明,请参照博客http://www.cnblogs.com/dathlin/p/7697782.html
此处贴上了Demo项目的服务器配置的示例代码
实例化一个对象
客户端系统是否启动
重连接失败的次数
客户端登录的标识名称,可以为ID号,也可以为登录名
远程服务器的IP地址和端口
服务器的时间,自动实现和服务器同步
系统与服务器的延时时间,单位毫秒
客户端启动成功的事件,重连成功也将触发此事件
连接失败时触发的事件
服务器的异常,启动,等等一般消息产生的时候,出发此事件
在客户端断开后并在重连服务器之前触发,用于清理系统资源
当接收到文本数据的时候,触发此事件
当接收到字节数据的时候,触发此事件
关闭该客户端引擎
启动客户端引擎,连接服务器系统
连接服务器之前的消息提示,如果是重连的话,就提示10秒等待信息
通信出错后的处理
接收的会话
异常
服务器端用于数据发送文本的方法
用户自定义的命令头
发送的文本
服务器端用于发送字节的方法
用户自定义的命令头
实际发送的数据
客户端的数据处理中心
会话
消息暗号
用户消息
数据内容
心跳线程的方法
返回对象的字符串表示形式
高性能的异步网络服务器类,适合搭建局域网聊天程序,消息推送程序
详细的使用说明,请参照博客http://www.cnblogs.com/dathlin/p/8097897.html
此处贴上了Demo项目的服务器配置的示例代码
实例化一个网络服务器类对象
所支持的同时在线客户端的最大数量,商用限制1000个,最小10个
获取或设置服务器是否记录客户端上下线信息
所有在线客户端的数量
初始化操作
关闭网络时的操作
异常下线
会话信息
异常
正常下线
会话信息
客户端的上下限状态变更时触发,仅作为在线客户端识别
当客户端上线的时候,触发此事件
当客户端下线的时候,触发此事件
当接收到文本数据的时候,触发此事件
当接收到字节数据的时候,触发此事件
当接收到了新的请求的时候执行的操作
异步对象
终结点
服务器端用于数据发送文本的方法
数据发送对象
用户自定义的数据对象,如不需要,赋值为0
发送的文本
服务器端用于发送字节的方法
数据发送对象
用户自定义的数据对象,如不需要,赋值为0
实际发送的数据
服务端用于发送所有数据到所有的客户端
用户自定义的命令头
需要传送的实际的数据
服务端用于发送所有数据到所有的客户端
用户自定义的命令头
需要群发客户端的字节数据
根据客户端设置的别名进行发送消息
客户端上线的别名
用户自定义的命令头
需要传送的实际的数据
根据客户端设置的别名进行发送消息
客户端上线的别名
用户自定义的命令头
需要传送的实际的数据
数据处理中心
会话对象
消息的代码
用户消息
数据内容
获取本对象的字符串表示形式
字符串
通用设备的基础网络信息
实例化一个通用的设备类
当客户端上线的时候,触发此事件
当客户端下线的时候,触发此事件
按照ASCII文本的方式进行触发接收的数据
按照字节的方式进行触发接收的数据
当接收到了新的请求的时候执行的操作
异步对象
终结点
通用设备的基础状态
设备的连接地址
设备的连接时间
网络套接字
上次接收到信息的时间
设备的ip地址
缓冲内存块
文件管理类服务器,负责服务器所有分类文件的管理,特点是不支持文件附加数据,但是支持直接访问文件名
本文件的服务器不支持存储文件携带的额外信息,是直接将文件存放在服务器指定目录下的,文件名不更改,特点是服务器查看方便。
以下的示例来自Demo项目,创建了一个简单的服务器对象。
实例化一个对象
当接收到了新的请求的时候执行的操作
异步对象
终结点
初始化数据
检查文件夹
从网络套接字接收文件并移动到目标的文件夹中,如果结果异常,则结束通讯
用于接收上传文件时的临时文件夹,临时文件使用结束后会被删除
获取本对象的字符串标识形式
字符串对象
文件的基础信息
文件名称
文件大小
文件的标识,注释
文件上传人的名称
文件传输客户端基类,提供上传,下载,删除的基础服务
服务器端的文件管理引擎终结点
获取或设置连接的超时时间,默认10秒
发送三个文件分类到服务器端
套接字对象
一级分类
二级分类
三级分类
是否成功的结果对象
删除服务器上的文件
文件的名称
一级分类
二级分类
三级分类
是否成功的结果对象
基础下载信息
一级分类
二级分类
三级分类
服务器的文件名称
下载的进度报告
数据源信息,决定最终存储到哪里去
是否成功的结果对象
上传文件给服务器
数据源,可以是文件名,也可以是数据流
在服务器保存的文件名,不包含驱动器路径
一级分类
二级分类
三级分类
文件的描述
文件的上传人
汇报进度
是否成功的结果对象
获取本对象的字符串表示形式
字符串信息
文件标记对象类
实例化一个文件标记对象
日志对象
完整的文件名称
新增一个文件的操作,仅仅是删除文件
对当前文件的操作内容
指示该对象是否能被清除
是否能够删除
进入文件的读取状态
离开本次的文件读取状态
文件集容器,绑定一个文件夹的文件信息组
实例化一个新的数据管理容器
日志记录对象,可以为空
文件的路径
包含所有文件列表信息的json文本缓存
获取文件的数量
当文件数量发生变化的时候触发的事件
下载文件时调用
文件的实际名称
文件名映射过去的实际的文件名字
上传文件时掉用
文件名,带后缀,不带任何的路径
文件的大小
文件映射名称
文件的拥有者
文件的额外描述
映射的文件名称
删除一个文件信息
实际的文件名称
映射之后的文件名
缓存JSON文本的方法,该机制使用乐观并发模型完成
从目录进行加载数据,必须实例化的时候加载,加载失败会导致系统异常,旧的文件丢失
单个文件的存储
文件的名称
文件的大小
文件的映射名称
文件的下载次数
文件的上传时间
文件的上传人,拥有者
文件的额外描述
获取大小
文件大小的字符串描述形式
与服务器文件引擎交互的客户端类,支持操作Advanced引擎和Ultimate引擎
这里需要需要的是,本客户端支持Advanced引擎和Ultimate引擎文件服务器,服务的类型需要您根据自己的需求来选择。
此处只演示创建实例,具体的上传,下载,删除的例子请参照对应的方法
实例化一个对象
删除服务器的文件操作
文件名称,带后缀
第一大类
第二大类
第三大类
是否成功的结果对象
下载服务器的文件到本地的文件操作
文件名称,带后缀
第一大类
第二大类
第三大类
下载的进度报告
准备本地保存的名称
是否成功的结果对象
用于分类的参数,,中间不需要的可以为空,对应的是服务器上的路径系统。
失败的原因大多数来自于网络的接收异常,或是服务器不存在文件。
下载服务器的文件到本地的数据流中
文件名称,带后缀
第一大类
第二大类
第三大类
下载的进度报告
流数据
是否成功的结果对象
用于分类的参数,,中间不需要的可以为空,对应的是服务器上的路径系统。
失败的原因大多数来自于网络的接收异常,或是服务器不存在文件。
上传本地的文件到服务器操作
本地的完整路径的文件名称
服务器存储的文件名称,带后缀
第一大类
第二大类
第三大类
文件的额外描述
文件的上传人
上传的进度报告
是否成功的结果对象
用于分类的参数,,中间不需要的可以为空,对应的是服务器上的路径系统。
失败的原因大多数来自于网络的接收异常,或是客户端不存在文件。
上传数据流到服务器操作
数据流内容
服务器存储的文件名称,带后缀
第一大类
第二大类
第三大类
文件的额外描述
文件的上传人
上传的进度报告
是否成功的结果对象
用于分类的参数,,中间不需要的可以为空,对应的是服务器上的路径系统。
失败的原因大多数来自于网络的接收异常,或是客户端不存在文件。
根据三种分类信息,还原成在服务器的相对路径,包含文件
文件名称,包含后缀名
第一类
第二类
第三类
是否成功的结果对象
根据三种分类信息,还原成在服务器的相对路径,仅仅路径
第一类
第二类
第三类
是否成功的结果对象
获取指定路径下的所有的文档
获取得到的文件合集
第一大类
第二大类
第三大类
是否成功的结果对象
用于分类的参数,,中间不需要的可以为空,对应的是服务器上的路径系统。
失败的原因大多数来自于网络的接收异常。
获取指定路径下的所有的文档
输出结果
第一大类
第二大类
第三大类
是否成功的结果对象
用于分类的参数,,中间不需要的可以为空,对应的是服务器上的路径系统。
失败的原因大多数来自于网络的接收异常。
获取指定路径下的所有的文档
想要获取的队列
指令
第一大类
第二大类
第三大类
数组的类型
是否成功的结果对象
终极文件管理服务器,实现所有的文件分类管理,读写分离,不支持直接访问文件名
本文件的服务器支持存储文件携带的额外信息,文件名被映射成了新的名称,无法在服务器直接查看文件信息。
以下的示例来自Demo项目,创建了一个简单的服务器对象。
实例化一个对象
所有文件组操作的词典锁
词典的锁
获取当前目录的读写锁,如果没有会自动创建
相对路径名
读写锁
从套接字接收文件并保存,更新文件列表
套接字
保存的文件名
是否成功的结果对象
根据文件的显示名称转化为真实存储的名称
第一大类
第二大类
第三大类
文件显示名称
是否成功的结果对象
删除已经存在的文件信息
文件的路径
文件的名称
当接收到了新的请求的时候执行的操作
异步对象
终结点
获取本对象的字符串表示形式
字符串对象
发布订阅类的客户端,使用指定的关键订阅相关的数据推送信息
详细的使用说明,请参照博客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的客户端类,支持读取,写入,发布订阅,但是不支持订阅,如果需要订阅,请使用另一个类
实例化一个客户端的对象,用于和服务器通信
服务器的ip地址
服务器的端口号
密码,如果服务器没有设置,密码设置为null
实例化一个客户端对象,需要手动指定Ip地址和端口
密码,如果服务器没有设置,密码设置为null
如果设置了密码,对密码进行验证
网络的套接字服务
是否成功的对象
在其他指定的套接字上,使用报文来通讯,传入需要发送的消息,返回一条完整的数据指令
指定的套接字
发送的完整的报文信息
无锁的基于套接字直接进行叠加协议的操作。
假设你有一个自己的socket连接了设备,本组件可以直接基于该socket实现modbus读取,三菱读取,西门子读取等等操作,前提是该服务器支持多协议,虽然这个需求听上去比较变态,但本组件支持这样的操作。
接收的完整的报文信息
自定义的指令交互方法,该指令用空格分割,举例: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 。
关键字
设置成功返回 1 。当 key 不存在或者不能为 key 设置生存时间时,返回 0 。
查找所有符合给定模式 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 已经存在并且是一个字符串, 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 不存在时,返回一个空表。
SAVE 命令执行一个同步保存操作,将当前 Redis 实例的所有数据快照(snapshot)以 RDB 文件的形式保存到硬盘。
保存成功时返回 OK 。
在后台异步(Asynchronously)保存当前数据库的数据到磁盘。
BGSAVE 命令执行之后立即返回 OK ,然后 Redis fork 出一个新子进程,原来的 Redis 进程(父进程)继续处理客户端请求,而子进程则负责将数据保存到磁盘,然后退出。
反馈信息。
获取服务器的时间戳信息,可用于本地时间的数据同步问题
带有服务器时间的结果对象
将信息 message 发送到指定的频道 channel,返回接收到信息 message 的订阅者数量。
频道,和关键字不是一回事
消息
接收到信息 message 的订阅者数量。
切换到指定的数据库,数据库索引号 index 用数字值指定,以 0 作为起始索引值。默认使用 0 号数据库。
索引值
是否切换成功
返回表示当前对象的字符串
字符串信息
提供了redis辅助类的一些方法
接收一行命令数据
网络套接字
带有结果对象的数据信息
接收一行字符串的信息
网络套接字
字符串的长度
带有结果对象的数据信息
从网络接收一条redis消息
网络套接字
接收的结果对象
将字符串数组打包成一个redis的报文信息
字节数据信息
结果报文信息
从原始的结果数据对象中提取出数字数据
原始的字节数据
带有结果对象的数据信息
从原始的结果数据对象中提取出数字数据
原始的字节数据
带有结果对象的数据信息
从结果的数据对象里提取字符串的信息
原始的字节数据
带有结果对象的数据信息
从redis的结果数据中分析出所有的字符串信息
结果数据
带有结果对象的数据信息
Redis协议的订阅操作,一个对象订阅一个或是多个频道的信息
实例化一个发布订阅类的客户端,需要指定ip地址,端口,及订阅关键字
服务器的IP地址
服务器的端口号
订阅关键字
实例化一个发布订阅类的客户端,需要指定ip地址,端口,及订阅关键字
服务器的IP地址
服务器的端口号
订阅关键字
如果Redis服务器设置了密码,此处就需要进行设置。必须在CreatePush方法调用前设置
创建数据推送服务
触发数据推送的委托
是否创建成功
关闭消息推送的界面
返回表示当前对象的字符串
字符串信息
同步访问数据的客户端类,用于向服务器请求一些确定的数据信息
详细的使用说明,请参照博客http://www.cnblogs.com/dathlin/p/7697782.html
此处贴上了Demo项目的服务器配置的示例代码
实例化一个客户端的对象,用于和服务器通信
服务器的ip地址
服务器的端口号
实例化一个客户端对象,需要手动指定Ip地址和端口
连接上服务器后需要进行的初始化操作,无论是否允许操作都要进行验证
网络套接字
是否初始化成功,依据具体的协议进行重写
客户端向服务器进行请求,请求字符串数据,忽略了自定义消息反馈
用户的指令头
发送数据
带返回消息的结果对象
客户端向服务器进行请求,请求字符串数组,忽略了自定义消息反馈
用户的指令头
发送数据
带返回消息的结果对象
客户端向服务器进行请求,请求字节数据
用户的指令头
发送的字节内容
带返回消息的结果对象
客户端向服务器进行请求,请求字符串数据,并返回状态信息
用户的指令头
发送数据
带返回消息的结果对象
客户端向服务器进行请求,请求字符串数据,并返回状态信息
用户的指令头
发送数据
带返回消息的结果对象
客户端向服务器进行请求,请求字符串数据,并返回状态信息
用户的指令头
发送数据
带返回消息的结果对象
需要发送的底层数据
需要发送的底层数据
带返回消息的结果对象
需要发送的底层数据
需要发送的底层数据
带返回消息的结果对象
客户端向服务器进行异步请求,请求字符串数据
用户的指令头
发送数据
客户端向服务器进行异步请求,请求字节数据
用户的指令头
发送的字节内容
带返回消息的结果对象
客户端向服务器进行异步请求,请求字符串数据
用户的指令头
发送数据
客户端向服务器进行请求,请求字符串数据,并返回状态信息
用户的指令头
发送数据
带返回消息的结果对象
客户端向服务器进行请求,请求字符串数据,并返回状态信息
用户的指令头
发送数据
带返回消息的结果对象
客户端向服务器进行请求,请求字符串数据,并返回状态信息
用户的指令头
发送数据
带返回消息的结果对象
获取本对象的字符串表示形式
字符串信息
异步消息处理服务器,主要用来实现接收客户端信息并进行消息反馈的操作,适用于客户端进行远程的调用,要求服务器反馈数据。
详细的使用说明,请参照博客http://www.cnblogs.com/dathlin/p/7697782.html
此处贴上了Demo项目的服务器配置的示例代码
实例化一个服务器消息请求的信息
接收字符串信息的事件
接收字符串数组信息的事件
接收字节信息的事件
向指定的通信对象发送字符串数据
通信对象
用户的指令头
实际发送的字符串数据
向指定的通信对象发送字符串数组
通信对象
用户的指令头
实际发送的字符串数组
向指定的通信对象发送字节数据
连接对象
用户的指令头
实际的数据
关闭网络的操作
当接收到了新的请求的时候执行的操作
异步对象
终结点
处理异常的方法
会话
异常信息
正常下线
会话
数据处理中心
当前的会话
协议指令头
客户端信号
触发的消息内容
当前在线的客户端数量
返回表示当前对象的字符串
用于服务器支持软件全自动更新升级的类
实例化一个对象
更新程序的名称
系统升级时客户端所在的目录,默认为C:\HslCommunication
当接收到了新的请求的时候执行的操作
异步对象
终结点
返回表示当前对象的字符串
字符串信息
UDP客户端的类,只负责发送数据到服务器,该数据经过封装
实例化对象,指定发送的服务器地址和端口号
服务器的Ip地址
端口号
客户端向服务器进行请求,请求字符串数据,忽略了自定义消息反馈
用户的指令头
发送数据
带返回消息的结果对象
客户端向服务器进行请求,请求字节数据
用户的指令头
发送的字节内容
带返回消息的结果对象
客户端向服务器进行请求,请求字符串数据,并返回状态信息
用户的指令头
发送数据
带返回消息的结果对象
客户端向服务器进行请求,请求字符串数据,并返回状态信息
用户的指令头
发送数据
带返回消息的结果对象
需要发送的底层数据
需要发送的底层数据
带返回消息的结果对象
需要发送的底层数据
需要发送的底层数据
带返回消息的结果对象
获取本对象的字符串表示形式
字符串信息
Udp网络的服务器端类
获取或设置一次接收时的数据长度,默认2KB数据长度
根据指定的端口启动Upd侦听
端口号信息
关闭引擎的操作
重新开始接收数据
数据处理中心
向指定的通信对象发送字符串数据
通信对象
用户的指令头
实际发送的字符串数据
向指定的通信对象发送字节数据
连接对象
用户的指令头
实际的数据
当接收到文本数据的时候,触发此事件
当接收到字节数据的时候,触发此事件
获取本对象的字符串表示形式
系统的语言基类,默认也即是中文版本
English Version Text
一个通用的日志接口
本组件的日志核心机制,如果您使用了本组件却不想使用本组件的日志组件功能,可以自己实现新的日志组件,只要继承本接口接口。其他常用的日志组件如下:(都是可以实现的)
- Log4Net
- NLog
实现类就不放示例代码了,存储日志的使用都是一样的,就是实例化的时候不一致,以下示例代码以单文件日志为例
文件存储模式,1:单文件,2:根据大小,3:根据时间
存储之前引发的事件,允许额外的操作
自定义的消息记录
消息等级
关键字
日志内容
写入一条调试日志
日志内容
写入一条调试日志
关键字
日志内容
写入一条解释性的信息
写入一条错误日志
日志内容
写入一条错误日志
关键字
日志内容
写入一条异常信息
关键字
异常
写入一条异常信息
关键字
内容
异常
写入一条致命日志
日志内容
写入一条致命日志
关键字
日志内容
写入一条信息日志
日志内容
写入一条信息日志
关键字
日志内容
写入一行换行符
写入任意字符串
文本
写入一条警告日志
日志内容
写入一条警告日志
关键字
日志内容
设置日志的存储等级,高于该等级的才会被存储
登记信息
获取已存在的日志文件名称
文件列表
过滤掉指定的关键字的日志,该信息不存储,但仍然触发BeforeSaveToFile事件
关键字
日志存储类的基类,提供一些基础的服务
基于此类可以实现任意的规则的日志存储规则,欢迎大家补充实现,本组件实现了3个日志类
- 单文件日志类
- 根据文件大小的类
- 根据时间进行存储的类
实例化一个日志对象
文件存储的锁
在存储到文件的时候将会触发的事件
日志存储模式,1:单文件,2:按大小存储,3:按时间存储
写入一条调试信息
写入一条调试信息
关键字
文本内容
写入一条普通信息
文本内容
写入一条普通信息
关键字
文本内容
写入一条警告信息
文本内容
写入一条警告信息
关键字
文本内容
写入一条错误消息
文本内容
写入一条错误消息
关键字
文本内容
写入一条致命错误信息
文本内容
写入一条致命错误信息
关键字
文本内容
写入一条异常信息
关键字
异常信息
写入一条异常信息
关键字
内容
异常
记录一条自定义的消息
消息的等级
关键字
文本
写入一条解释性的消息,不需要带有回车键
解释性的文本
写入一条任意字符
内容
写入一条换行符
设置日志的存储等级,高于该等级的才会被存储
消息等级
过滤指定的关键字存储
关键字
获取要存储的文件的名称
完整的文件路径信息,带文件名
返回检查的路径名称,将会包含反斜杠
路径信息
检查后的结果对象
释放资源
是否初次调用
释放资源
带有日志消息的事件
消息信息
日志存储回调的异常信息
使用其他的异常信息来初始化日志异常
异常信息
日志文件输出模式
按每个小时生成日志文件
按每天生成日志文件
按每个周生成日志文件
按每个月生成日志文件
按每季度生成日志文件
按每年生成日志文件
记录消息的等级
一条消息都不记录
记录致命等级及以上日志的消息
记录异常等级及以上日志的消息
记录警告等级及以上日志的消息
记录信息等级及以上日志的消息
记录调试等级及以上日志的信息
单个日志的记录信息
默认的无参构造器
单个记录信息的标识ID,程序重新运行时清空
消息的等级
线程ID
消息文本
消息发生的事件
消息的关键字
是否取消写入到文件中去,在事件BeforeSaveToFile触发的时候捕获即可设置。
返回表示当前对象的字符串
字符串信息
返回表示当前对象的字符串,剔除了关键字
字符串信息
日志类的管理器
存储文件的时候指示单文件存储
存储文件的时候指示根据文件大小存储
存储文件的时候指示根据日志时间来存储
日志文件的头标志
公开的一个静态变量,允许随意的设置
通过异常文本格式化成字符串用于保存或发送
文本消息
异常
异常最终信息
一个日志组件,可以根据时间来区分不同的文件存储
此日志实例将根据日期时间来进行分类,支持的时间分类如下:
- 小时
- 天
- 周
- 月份
- 季度
- 年份
实例化一个根据时间存储的日志组件
文件存储的路径
存储文件的间隔
获取需要保存的日志文件
完整的文件路径,含文件名
获取所有的文件夹中的日志文件
所有的文件路径集合
返回表示当前对象的字符串
字符串
根据文件的大小来存储日志信息
此日志的实例是根据文件的大小储存,例如设置了2M,每隔2M,系统将生成一个新的日志文件。
实例化一个根据文件大小生成新文件的
日志文件的保存路径
每个日志文件的最大大小,默认2M
获取需要保存的日志文件
字符串数据
返回所有的日志文件
所有的日志文件信息
获取之前保存的日志文件
获取一个新的默认的文件名称
返回表示当前对象的字符串
字符串数据
单日志文件对象
此日志实例化需要指定一个完整的文件路径,当需要记录日志的时候调用方法,会使得日志越来越大,对于写入的性能没有太大影响,但是会影响文件读取。
实例化一个单文件日志的对象
文件的路径
单日志文件允许清空日志内容
获取单日志文件的所有保存记录
字符串信息
获取所有的日志文件数组,对于单日志文件来说就只有一个
字符串数组,包含了所有的存在的日志数据
获取存储的文件的名称
字符串数据
返回表示当前对象的字符串
Modbus协议相关的一些信息
读取线圈
读取离散量
读取寄存器
读取输入寄存器
写单个线圈
写单个寄存器
写多个线圈
写多个寄存器
不支持该功能码
该地址越界
读取长度超过最大值
读写异常
将modbus指令打包成Modbus-Tcp指令
Modbus指令
消息的序号
Modbus-Tcp指令
分析Modbus协议的地址信息,该地址适应于tcp及rtu模式
带格式的地址,比如"100","x=4;100","s=1;100","s=1;x=4;100"
起始地址是否从0开始
默认的功能码信息
转换后的地址信息
通过错误码来获取到对应的文本消息
错误码
错误的文本描述
服务器端提供的数据监视服务
本次数据监视的地址
数据写入时触发的事件
数据改变时触发的事件
强制设置触发事件
强制设置触发值变更事件
变更前的值
变更后的值
ModBus的异步状态信息
实例化一个对象
连接的时间
远端的地址
远端的Ip地址
工作套接字
消息头的缓存
消息头的接收长度
内容数据缓存
内容数据接收长度
回发信息的同步锁
指示客户端是否下线,已经下线则为1
判断当前的客户端是否已经下线,下线成功的话,就返回True
清除原先的接收状态
Modbus-Tcp协议的客户端通讯类,方便的和服务器进行数据交互
本客户端支持的标准的modbus-tcp协议,内置的消息号会进行自增,地址格式采用富文本表示形式
地址共可以携带3个信息,最完整的表示方式"s=2;x=3;100",对应的modbus报文是 02 03 00 64 00 01 的前四个字节,站号,功能码,起始地址,下面举例
-
读取线圈
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的值
对于写入来说也是一致的
-
写入线圈
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
基本的用法请参照下面的代码示例
实例化一个MOdbus-Tcp协议的客户端对象
指定服务器地址,端口号,客户端自己的站号来初始化
服务器的Ip地址
服务器的端口号
客户端自身的站号
重写网络连接时的初始化,如果配置了账户信息,就强制启动登录操作
套接字
是否初始化成功
获取或设置起始的地址是否从0开始,默认为True
因为有些设备的起始地址是从1开始的,就要设置本属性为True
获取或者重新修改服务器的默认站号信息,当然,你可以再读写的时候动态指定,参见备注
当你调用 ReadCoil("100") 时,对应的站号就是本属性的值,当你调用 ReadCoil("s=2;100") 时,就忽略本属性的值,读写寄存器的时候同理
获取或设置数据解析的格式,默认ABCD,可选BADC,CDAB,DCBA格式
对于Int32,UInt32,float,double,Int64,UInt64类型来说,存在多地址的电脑情况,需要和服务器进行匹配
字符串数据是否按照字来反转
字符串按照2个字节的排列进行颠倒,根据实际情况进行设置
获取modbus协议自增的消息号,你可以自定义消息的细节。
生成一个读取线圈的指令头
地址
长度
包含结果对象的报文
生成一个读取离散信息的指令头
地址
长度
包含结果对象的报文
生成一个读取寄存器的指令头
地址
长度
包含结果对象的报文
生成一个读取寄存器的指令头
地址
长度
包含结果对象的报文
生成一个写入单线圈的指令头
地址
长度
包含结果对象的报文
生成一个写入单个寄存器的报文
地址
长度
包含结果对象的报文
生成批量写入单个线圈的报文信息
地址
实际数据值
包含结果对象的报文
生成批量写入寄存器的报文信息
地址
实际值
包含结果对象的报文
检查当前的Modbus-Tcp响应是否是正确的
发送的数据信息
带是否成功的结果数据
读取服务器的数据,需要指定不同的功能码
指令
地址
长度
带是否成功的结果数据
读取服务器的数据,需要指定不同的功能码
地址
长度
带是否成功的结果数据
读取线圈,需要指定起始地址
起始地址,格式为"1234"
带有成功标志的bool对象
批量的读取线圈,需要指定起始地址,读取长度
起始地址,格式为"1234"
读取长度
带有成功标志的bool数组对象
读取输入线圈,需要指定起始地址
起始地址,格式为"1234"
带有成功标志的bool对象
批量的读取输入点,需要指定起始地址,读取长度
起始地址,格式为"1234"
读取长度
带有成功标志的bool数组对象
从Modbus服务器批量读取寄存器的信息,需要指定起始地址,读取长度
起始地址,格式为"1234",或者是带功能码格式x=3;1234
读取的数量
带有成功标志的字节信息
富地址格式,支持携带站号信息,功能码信息,具体参照类的示例代码
此处演示批量读取的示例
写一个寄存器数据
起始地址
高位
地位
返回写入结果
写一个寄存器数据
起始地址
写入值
返回写入结果
写一个寄存器数据
起始地址
写入值
返回写入结果
将数据写入到Modbus的寄存器上去,需要指定起始地址和数据内容
起始地址,格式为"1234"
写入的数据,长度根据data的长度来指示
返回写入结果
富地址格式,支持携带站号信息,功能码信息,具体参照类的示例代码
此处演示批量写入的示例
写一个线圈信息,指定是否通断
起始地址
写入值
返回写入结果
批量写线圈信息,指定是否通断
起始地址
写入值
返回写入结果
批量读取线圈或是离散的数据信息,需要指定地址和长度,具体的结果取决于实现
数据地址
数据长度
带有成功标识的bool[]数组
向线圈中写入bool数组,返回是否写入成功
要写入的数据地址
要写入的实际数据,长度为8的倍数
返回写入结果
返回表示当前对象的字符串
字符串信息
Modbus的虚拟服务器,同时支持Tcp和Rtu的机制,支持线圈,离散输入,寄存器和输入寄存器的读写操作,可以用来当做系统的数据交换池
可以基于本类实现一个功能复杂的modbus服务器,在传统的.NET版本里,还支持modbus-rtu指令的收发,.NET Standard版本服务器不支持rtu操作。服务器支持的数据池如下:
- 线圈,功能码对应01,05,15
- 离散输入,功能码对应02
- 寄存器,功能码对应03,06,16
- 输入寄存器,功能码对应04,输入寄存器在服务器端可以实现读写的操作
读写的地址格式为富文本地址,具体请参照下面的示例代码。
实例化一个Modbus Tcp的服务器,支持数据读写操作
获取或设置数据解析的格式,默认ABCD,可选BADC,CDAB,DCBA格式
对于Int32,UInt32,float,double,Int64,UInt64类型来说,存在多地址的电脑情况,需要和服务器进行匹配
字符串数据是否按照字来反转
获取或设置服务器的站号信息,对于rtu模式,只有站号对了,才会反馈回数据信息。默认为1。
将数据源的内容生成原始数据,等待缓存
原始的数据内容
从原始的数据复原数据
原始的数据
读取地址的线圈的通断情况
起始地址,示例:"100"
True或是False
批量读取地址的线圈的通断情况
起始地址,示例:"100"
读取长度
True或是False
写入线圈的通断值
起始地址,示例:"100"
是否通断
True或是False
写入线圈数组的通断值
起始地址,示例:"100"
是否通断
True或是False
读取地址的离散线圈的通断情况
起始地址,示例:"100"
True或是False
批量读取地址的离散线圈的通断情况
起始地址,示例:"100"
读取长度
True或是False
写入离散线圈的通断值
起始地址,示例:"100"
是否通断
写入离散线圈数组的通断值
起始地址,示例:"100"
是否通断
读取自定义的寄存器的值。按照字为单位
起始地址,示例:"100","x=4;100"
数据长度
byte数组值
写入自定义的数据到数据内存中去
地址
数据值
是否写入成功的结果对象
写入寄存器数据,指定字节数据
起始地址,示例:"100",如果是输入寄存器:"x=4;100"
高位数据
地位数据
当客户端登录后,进行Ip信息的过滤,然后触发本方法,也就是说之后的客户端需要
网络套接字
终端节点
创建特殊的功能标识,然后返回该信息
modbus核心报文
错误码
携带错误码的modbus报文
创建返回消息
modbus核心报文
返回的实际数据内容
携带内容的modbus报文
创建写入成功的反馈信号
modbus核心报文
携带成功写入的信息
新增一个数据监视的任务,针对的是寄存器
监视地址对象
移除一个数据监视的任务
在数据变更后,进行触发是否产生订阅
数据地址
修改之前的数
修改之后的数
检测当前的Modbus接收的指定是否是合法的
缓存数据
是否合格
Modbus核心数据交互方法,允许重写自己来实现,报文只剩下核心的Modbus信息,去除了MPAB报头信息
核心的Modbus报文
进行数据交互之后的结果
释放当前的对象
是否托管对象
返回表示当前对象的字符串
字符串
监视使用的数据缓存
地址
原有的值
新的值
一个工业物联网的底层架构框架,专注于底层的技术通信及跨平台,跨语言通信功能,实现各种主流的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#几乎是一模一样的,都是可以相互通讯的。
本软件著作权归Richard.Hu所有,开源项目地址:https://github.com/dathlin/HslCommunication 开源协议:LGPL-3.0
博客地址:https://www.cnblogs.com/dathlin/p/7703805.html
打赏请扫码:
- 正式发布库到互联网上去。
- 添加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特性类,现在支持直接基于对象的读写操作,提供了一种更加便捷的读写数据的机制,详细的关注后续的论坛。
AB PLC的辅助类,用来辅助生成基本的指令信息
CIP命令中的读取数据的服务
CIP命令中的写数据的服务
CIP命令中的读并写的数据服务
CIP命令中的读片段的数据服务
CIP命令中的写片段的数据服务
CIP命令中的对数据读取服务
bool型数据,一个字节长度
byte型数据,一个字节长度
整型,两个字节长度
长整型,四个字节长度
特长整型,8个字节
实数数据,四个字节长度
实数数据,八个字节的长度
结构体数据,不定长度
字符串数据内容
二进制数据内容
将CommandSpecificData的命令,打包成可发送的数据指令
实际的命令暗号
当前会话的id
CommandSpecificData命令
最终可发送的数据命令
打包生成一个请求读取数据的节点信息,CIP指令信息
地址
指代数组的长度
CIP的指令信息
打包生成一个请求读取数据片段的节点信息,CIP指令信息
节点的名称
起始的索引位置
读取的数据长度,对于short来说,最大是489长度
CIP的指令信息
根据指定的数据和类型,生成对应的数据
地址信息
数据类型
字节值
如果节点为数组,就是数组长度
CIP的指令信息
生成读取直接节点数据信息的内容
PLC所在的槽号
cip指令内容
最终的指令值
从PLC反馈的数据解析
PLC的反馈数据
是否是返回的操作
带有结果标识的最终数据
AB PLC Data communication class, support read and write PLC node data
thanks 江阴- ∮溪风-⊙_⌒ help test the dll
thanks 上海-null 测试了这个dll
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
when read array type, this means the segment length. when data type is 8-byte data, it should set to be 50
After connecting the Allenbradley plc, a next step handshake protocol is required
socket after connectting sucessful
Success of initialization
A next step handshake agreement is required before disconnecting the Allenbradley plc
socket befor connection close
Whether the disconnect operation was successful
Build a read command bytes
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
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
Bulk read Data information
Name of the node
Result data with result object
批量读取数据信息,数据长度为读取的数组长度信息 -> Bulk read data information, data length for read array length information
节点的名称 -> 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
array length
Results Bytes
使用CIP报文和服务器进行核心的数据交换
Cip commands
Results Bytes
读取单个的bool数据信息 -> Read a single BOOL data information
节点的名称 -> Name of the node
带有结果对象的结果数据 -> Result data with result info
批量读取的bool数组信息 -> Bulk read of bool array information
节点的名称 -> 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的short类型的数组 -> Read an array of the short type of the PLC
节点的名称 -> Name of the node
数组长度 -> Array length
带有结果对象的结果数据 -> Result data with result info
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
读取PLC的ushort类型的数组 -> An array that reads the ushort type of the PLC
节点的名称 -> Name of the node
数组长度 -> Array length
带有结果对象的结果数据 -> Result data with result info
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
读取PLC的int类型的数组 -> An array that reads the int type of the PLC
节点的名称 -> Name of the node
数组长度 -> Array length
带有结果对象的结果数据 -> Result data with result info
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
读取PLC的uint类型的数组 -> An array that reads the UINT type of the PLC
节点的名称 -> Name of the node
数组长度 -> Array length
带有结果对象的结果数据 -> Result data with result info
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
读取PLC的float类型的数组 -> An array that reads the float type of the PLC
节点的名称 -> Name of the node
数组长度 -> Array length
带有结果对象的结果数据 -> Result data with result info
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
读取PLC的long类型的数组 -> An array that reads the long type of the PLC
节点的名称 -> Name of the node
数组长度 -> Array length
带有结果对象的结果数据 -> Result data with result info
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
读取PLC的ulong类型的数组 -> An array that reads the ULONG type of the PLC
节点的名称 -> Name of the node
数组长度 -> Array length
带有结果对象的结果数据 -> Result data with result info
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
读取PLC的double类型的数组 -> An array that reads the double type of the PLC
节点的名称 -> Name of the node
数组长度 -> Array length
带有结果对象的结果数据 -> Result data with result info
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
使用指定的类型写入指定的节点数据 -> Writes the specified node data with the specified type
节点的名称 -> 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
向PLC中写入short数组,返回是否写入成功 -> Writes a short array to the PLC to return whether the write was successful
节点的名称 -> Name of the node
实际数据 -> Actual data
是否写入成功 -> Whether to write successfully
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向PLC中写入ushort数组,返回是否写入成功 -> Writes an array of ushort to the PLC to return whether the write was successful
节点的名称 -> Name of the node
实际数据 -> Actual data
是否写入成功 -> Whether to write successfully
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向PLC中写入int数组,返回是否写入成功 -> Writes an int array to the PLC to return whether the write was successful
节点的名称 -> Name of the node
实际数据 -> Actual data
是否写入成功 -> Whether to write successfully
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
Writes an array of UINT to the PLC to return whether the write was successful
节点的名称 -> Name of the node
实际数据 -> Actual data
是否写入成功 -> Whether to write successfully
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
Writes an array of float to the PLC to return whether the write was successful
Name of the node
Actual data
Whether to write successfully
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
Writes an array of long to the PLC to return whether the write was successful
Name of the node
Actual data
Whether to write successfully
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
Writes an array of ulong to the PLC to return whether the write was successful
Name of the node
Actual data
Whether to write successfully
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
Writes an array of double to the PLC to return whether the write was successful
Name of the node
Actual data
Whether to write successfully
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
向PLC中写入string数据,返回是否写入成功,该string类型是针对PLC的DINT类型,长度自动扩充到8
节点的名称 -> Name of the node
实际数据 -> Actual data
是否写入成功 -> Whether to write successfully
向PLC中写入bool数据,返回是否写入成功
节点的名称 -> Name of the node
实际数据 -> Actual data
是否写入成功 -> Whether to write successfully
向PLC中写入byte数据,返回是否写入成功
节点的名称 -> Name of the node
实际数据 -> Actual data
是否写入成功 -> Whether to write successfully
向PLC注册会话ID的报文 ->
Register a message with the PLC for the session ID
报文信息 -> Message information
获取卸载一个已注册的会话的报文 ->
Get a message to uninstall a registered session
字节报文信息 -> BYTE message information
返回表示当前对象的字符串
字符串信息
基恩士PLC的数据读写类
地址的输入的格式说明如下:
地址名称
地址代号
示例
地址进制
字操作
位操作
KV-7500/7300
KV-5500/5000/3000
KV Nano
-
输入继电器
X
X100,X1A0
16
√
√
R00000~R99915
R00000~R99915
R00000~R59915
-
输出继电器
Y
Y100,Y1A0
16
√
√
R00000~R99915
R00000~R99915
R00000~R59915
-
链接继电器
B
B100,B1A0
16
√
√
B0000~B7FFF
B0000~B3FFF
B0000~B1FFF
-
内部辅助继电器
M
M100,M200
10
√
√
MR00000~MR99915
MR00000~MR99915
MR00000~MR59915
-
锁存继电器
L
L100,L200
10
√
√
LR00000~LR99915
LR00000~LR99915
LR00000~LR19915
-
控制继电器
SM
SM100,SM200
10
√
√
CR0000~CR7915
CR0000~CR3915
CR0000~CR8915
-
控制存储器
SD
SD100,SD200
10
√
×
CM0000~CM5999
CM0000~CM5999
CM0000~CM8999
-
数据存储器
D
D100,D200
10
√
×
DM00000~DM65534
DM00000~DM65534
DM00000~DM32767
-
扩展数据存储器
D
D100000~D165534
10
√
×
EM00000~EM65534
EM00000~EM65534
×
-
文件寄存器
R
R100,R200
10
√
×
FM00000~FM32767
FM00000~FM32767
×
-
文件寄存器
ZR
ZR100,ZR1A0
16
√
×
ZF000000~ZF524287
ZF000000~ZF131071
×
-
链路寄存器
W
W100,W1A0
16
√
×
W0000~7FFF
W0000~3FFF
W0000~3FFF
-
定时器(当前值)
TN
TN100,TN200
10
√
×
T0000~T3999
T0000~T3999
T000~T511
-
定时器(接点)
TS
TS100,TS200
10
√
√
T0000~T3999
T0000~T3999
T000~T511
-
计数器(当前值)
CN
CN100,CN200
10
√
×
C0000~C3999
C0000~C3999
C000~C255
-
计数器(接点)
CS
CS100,CS200
10
√
√
C0000~C3999
C0000~C3999
C000~C255
实例化基恩士的Qna兼容3E帧协议的通讯对象
实例化一个基恩士的Qna兼容3E帧协议的通讯对象
PLC的Ip地址
PLC的端口
分析地址的方法,允许派生类里进行重写操作
地址信息
数据长度
解析后的数据信息
获取当前对象的字符串标识形式
字符串信息
基恩士PLC的数据通信类
地址的输入的格式说明如下:
地址名称
地址代号
示例
地址进制
字操作
位操作
KV-7500/7300
KV-5500/5000/3000
KV Nano
-
输入继电器
X
X100,X1A0
16
√
√
R00000~R99915
R00000~R99915
R00000~R59915
-
输出继电器
Y
Y100,Y1A0
16
√
√
R00000~R99915
R00000~R99915
R00000~R59915
-
链接继电器
B
B100,B1A0
16
√
√
B0000~B7FFF
B0000~B3FFF
B0000~B1FFF
-
内部辅助继电器
M
M100,M200
10
√
√
MR00000~MR99915
MR00000~MR99915
MR00000~MR59915
-
锁存继电器
L
L100,L200
10
√
√
LR00000~LR99915
LR00000~LR99915
LR00000~LR19915
-
控制继电器
SM
SM100,SM200
10
√
√
CR0000~CR7915
CR0000~CR3915
CR0000~CR8915
-
控制存储器
SD
SD100,SD200
10
√
×
CM0000~CM5999
CM0000~CM5999
CM0000~CM8999
-
数据存储器
D
D100,D200
10
√
×
DM00000~DM65534
DM00000~DM65534
DM00000~DM32767
-
扩展数据存储器
D
D100000~D165534
10
√
×
EM00000~EM65534
EM00000~EM65534
×
-
文件寄存器
R
R100,R200
10
√
×
FM00000~FM32767
FM00000~FM32767
×
-
文件寄存器
ZR
ZR100,ZR1A0
16
√
×
ZF000000~ZF524287
ZF000000~ZF131071
×
-
链路寄存器
W
W100,W1A0
16
√
×
W0000~7FFF
W0000~3FFF
W0000~3FFF
-
定时器(当前值)
TN
TN100,TN200
10
√
×
T0000~T3999
T0000~T3999
T000~T511
-
定时器(接点)
TS
TS100,TS200
10
√
√
T0000~T3999
T0000~T3999
T000~T511
-
计数器(当前值)
CN
CN100,CN200
10
√
×
C0000~C3999
C0000~C3999
C000~C255
-
计数器(接点)
CS
CS100,CS200
10
√
√
C0000~C3999
C0000~C3999
C000~C255
实例化基恩士的Qna兼容3E帧协议的通讯对象
实例化一个基恩士的Qna兼容3E帧协议的通讯对象
PLC的Ip地址
PLC的端口
分析地址的方法,允许派生类里进行重写操作
地址信息
数据长度
解析后的数据信息
获取当前对象的字符串标识形式
字符串信息
It is determined to be the XGK/I/R series through a reserved area
LSisServer
LSisServer
读取自定义的寄存器的值
起始地址,示例:"I100","M100"
数据长度
byte数组值
写入自定义的数据到数据内存中去
地址
数据值
是否写入成功的结果对象
读取指定地址的字节数据
西门子的地址信息
带有成功标志的结果对象
将byte数据信息写入到指定的地址当中
西门子的地址信息
字节数据信息
是否成功的结果
读取指定地址的bool数据对象
西门子的地址信息
带有成功标志的结果对象
往指定的地址里写入bool数据对象
西门子的地址信息
值
是否成功的结果
当客户端登录后,进行Ip信息的过滤,然后触发本方法,也就是说之后的客户端需要
网络套接字
终端节点
从字节数据加载数据信息
字节数据
将数据信息存储到字节数组去
所有的内容
返回表示当前对象的字符串
字符串信息
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
Address example likes the follow
[welcome to finish]
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
CPU TYPE
Cpu is error
RUN, STOP, ERROR, DEBUG
FEnet I/F module’s Base No.
FEnet I/F module’s Slot No.
Read Bytes from plc, you should specify address
Start Address, for example: M100
Array of data Lengths
Whether to read the successful result object
Write bytes to plc, you should specify bytes, can't be null
Start Address, for example: M100
source dara
Whether to write the successful result object
Read single byte value from plc
Start address
result
Write single byte value to plc
Start address
value
Whether to write the successful
WriteCoil
AnalysisAddress
Get DataType to Address
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
Returns a string representing the current object
字符串
三菱PLC的数据类型,此处包含了几个常用的类型
如果您清楚类型代号,可以根据值进行扩展
数据类型的代号
0或1,默认为0
ASCII格式的类型信息
指示地址的多少进制的,10或是16
类型的代号值(软元件代码,用于区分软元件类型,如:D,R)
数据的类型,0代表按字,1代表按位
当以ASCII格式通讯时的类型描述
指示地址是10进制,还是16进制的
X输入寄存器
Y输出寄存器
M中间寄存器
S状态寄存器
D数据寄存器
R文件寄存器
三菱PLC通讯协议,采用A兼容1E帧协议实现,使用二进制码通讯,请根据实际型号来进行选取
本类适用于的PLC列表
- FX3U(C) PLC 测试人sandy_liao
数据地址支持的格式如下:
地址名称
地址代号
示例
地址进制
字操作
位操作
备注
-
内部继电器
M
M100,M200
10
√
√
-
输入继电器
X
X10,X20
8
√
√
-
输出继电器
Y
Y10,Y20
8
√
√
-
步进继电器
S
S100,S200
10
√
√
-
数据寄存器
D
D1000,D2000
10
√
×
-
文件寄存器
R
R100,R200
10
√
×
本通讯类由CKernal推送,感谢
实例化三菱的A兼容1E帧协议的通讯对象
实例化一个三菱的A兼容1E帧协议的通讯对象
PLC的Ip地址
PLC的端口
PLC编号
从三菱PLC中读取想要的数据,返回读取结果
读取地址,格式为"M100","D100","W1A0"
读取的数据长度,字最大值960,位最大值7168
带成功标志的结果数据对象
从三菱PLC中批量读取位软元件,返回读取结果
起始地址
读取的长度
带成功标志的结果数据对象
向PLC写入数据,数据格式为原始的字节类型
初始地址
原始的字节数据
返回写入结果
向PLC中位软元件写入bool数组,返回值说明,比如你写入M100,values[0]对应M100
要写入的数据地址
要写入的实际数据,可以指定任意的长度
返回写入结果
返回表示当前对象的字符串
字符串信息
根据类型地址长度确认需要读取的指令头
起始地址
长度
指示是否按照位成批的读出
PLC编号
带有成功标志的指令数据
根据类型地址以及需要写入的数据来生成指令头
起始地址
数据值
PLC编号
带有成功标志的指令数据
从PLC反馈的数据中提取出实际的数据内容,需要传入反馈数据,是否位读取
反馈的数据内容
是否位读取
解析后的结果对象
所有三菱通讯类的通用辅助工具类,包含了一些通用的静态方法,可以使用本类来获取一些原始的报文信息。详细的操作参见例子
解析A1E协议数据地址
数据地址
从三菱地址,是否位读取进行创建读取的MC的核心报文
是否进行了位读取操作
三菱Mc协议的数据地址
带有成功标识的报文对象
从三菱地址,是否位读取进行创建读取Ascii格式的MC的核心报文
三菱Mc协议的数据地址
是否进行了位读取操作
带有成功标识的报文对象
以字为单位,创建数据写入的核心报文
三菱Mc协议的数据地址
实际的原始数据信息
带有成功标识的报文对象
以字为单位,创建ASCII数据写入的核心报文
三菱Mc协议的数据地址
实际的原始数据信息
带有成功标识的报文对象
以位为单位,创建数据写入的核心报文
三菱Mc协议的数据地址
原始的bool数组数据
带有成功标识的报文对象
以位为单位,创建ASCII数据写入的核心报文
三菱Mc协议的数据地址
原始的bool数组数据
带有成功标识的报文对象
从三菱的地址中构建MC协议的6字节的ASCII格式的地址
三菱地址
三菱的数据类型
6字节的ASCII格式的地址
将0,1,0,1的字节数组压缩成三菱格式的字节数组来表示开关量的
原始的数据字节
压缩过后的数据字节
将bool的组压缩成三菱格式的字节数组来表示开关量的
原始的数据字节
压缩过后的数据字节
计算Fx协议指令的和校验信息
字节数据
校验之后的数据
检查指定的和校验是否是正确的
字节数据
是否成功
三菱PLC通讯类,采用Qna兼容3E帧协议实现,需要在PLC侧先的以太网模块先进行配置,必须为ASCII通讯格式
地址的输入的格式说明如下:
地址名称
地址代号
示例
地址进制
字操作
位操作
备注
-
内部继电器
M
M100,M200
10
√
√
-
输入继电器
X
X100,X1A0
16
√
√
-
输出继电器
Y
Y100,Y1A0
16
√
√
-
锁存继电器
L
L100,L200
10
√
√
-
报警器
F
F100,F200
10
√
√
-
边沿继电器
V
V100,V200
10
√
√
-
链接继电器
B
B100,B1A0
16
√
√
-
步进继电器
S
S100,S200
10
√
√
-
数据寄存器
D
D1000,D2000
10
√
×
-
链接寄存器
W
W100,W1A0
16
√
×
-
文件寄存器
R
R100,R200
10
√
×
-
ZR文件寄存器
ZR
ZR100,ZR2A0
16
√
×
-
变址寄存器
Z
Z100,Z200
10
√
×
-
定时器的触点
TS
TS100,TS200
10
√
√
-
定时器的线圈
TC
TC100,TC200
10
√
√
-
定时器的当前值
TN
TN100,TN200
10
√
×
-
累计定时器的触点
SS
SS100,SS200
10
√
√
-
累计定时器的线圈
SC
SC100,SC200
10
√
√
-
累计定时器的当前值
SN
SN100,SN200
10
√
×
-
计数器的触点
CS
CS100,CS200
10
√
√
-
计数器的线圈
CC
CC100,CC200
10
√
√
-
计数器的当前值
CN
CN100,CN200
10
√
×
实例化三菱的Qna兼容3E帧协议的通讯对象
实例化一个三菱的Qna兼容3E帧协议的通讯对象
PLC的Ip地址
PLC的端口
网络号
网络站号
分析地址的方法,允许派生类里进行重写操作
地址信息
数据长度
解析后的数据信息
从三菱PLC中读取想要的数据,返回读取结果,读取的单位为字
读取地址,格式为"M100","D100","W1A0"
读取的数据长度,字最大值960,位最大值7168
带成功标志的结果数据对象
地址支持的列表参考 的备注说明
假设起始地址为D100,D100存储了温度,100.6℃值为1006,D101存储了压力,1.23Mpa值为123,D102,D103存储了产量计数,读取如下:
以下是读取不同类型数据的示例
向PLC写入数据,数据格式为原始的字节类型
初始地址
原始的字节数据
假设起始地址为D100,D100存储了温度,100.6℃值为1006,D101存储了压力,1.23Mpa值为123,D102,D103存储了产量计数,写入如下:
以下是读取不同类型数据的示例
结果
从三菱PLC中批量读取位软元件,返回读取结果
起始地址
读取的长度
带成功标志的结果数据对象
地址支持的列表参考 的备注说明
向PLC中位软元件写入bool数组,返回值说明,比如你写入M100,values[0]对应M100
要写入的数据地址
要写入的实际数据,可以指定任意的长度
返回写入结果
远程Run操作
是否成功
远程Stop操作
是否成功
读取PLC的型号信息
返回型号的结果对象
获取当前对象的字符串标识形式
字符串信息
将MC协议的核心报文打包成一个可以直接对PLC进行发送的原始报文
MC协议的核心报文
网络号
网络站号
原始报文信息
从PLC反馈的数据中提取出实际的数据内容,需要传入反馈数据,是否位读取
反馈的数据内容
是否位读取
解析后的结果对象
三菱PLC的数据类型,此处包含了几个常用的类型
如果您清楚类型代号,可以根据值进行扩展
数据类型的代号
0或1,默认为0
ASCII格式的类型信息
指示地址的多少进制的,10或是16
类型的代号值
数据的类型,0代表按字,1代表按位
当以ASCII格式通讯时的类型描述
指示地址是10进制,还是16进制的
X输入继电器
Y输出继电器
M中间继电器
D数据寄存器
W链接寄存器
L锁存继电器
F报警器
V边沿继电器
B链接继电器
R文件寄存器
S步进继电器
变址寄存器
定时器的当前值
定时器的触点
定时器的线圈
累计定时器的触点
累计定时器的线圈
累计定时器的当前值
计数器的当前值
计数器的触点
计数器的线圈
文件寄存器ZR区
X输入继电器
Y输出继电器
链接继电器
内部辅助继电器
锁存继电器
控制继电器
控制存储器
数据存储器
文件寄存器
文件寄存器
链路寄存器
计时器(当前值)
计时器(接点)
计数器(当前值)
计数器(接点)
输入继电器
输出继电器
链接继电器
内部继电器
数据存储器
链接存储器
计时器(当前值)
计时器(接点)
计数器(当前值)
计数器(接点)
特殊链接继电器
特殊链接存储器
三菱PLC通讯类,采用Qna兼容3E帧协议实现,需要在PLC侧先的以太网模块先进行配置,必须为二进制通讯
目前组件测试通过的PLC型号列表,有些来自于网友的测试
- Q06UDV PLC 感谢hwdq0012
- fx5u PLC 感谢山楂
- Q02CPU PLC
- L02CPU PLC
地址的输入的格式说明如下:
地址名称
地址代号
示例
地址进制
字操作
位操作
备注
-
内部继电器
M
M100,M200
10
√
√
-
输入继电器
X
X100,X1A0
16
√
√
-
输出继电器
Y
Y100,Y1A0
16
√
√
-
锁存继电器
L
L100,L200
10
√
√
-
报警器
F
F100,F200
10
√
√
-
边沿继电器
V
V100,V200
10
√
√
-
链接继电器
B
B100,B1A0
16
√
√
-
步进继电器
S
S100,S200
10
√
√
-
数据寄存器
D
D1000,D2000
10
√
×
-
链接寄存器
W
W100,W1A0
16
√
×
-
文件寄存器
R
R100,R200
10
√
×
-
ZR文件寄存器
ZR
ZR100,ZR2A0
16
√
×
-
变址寄存器
Z
Z100,Z200
10
√
×
-
定时器的触点
TS
TS100,TS200
10
√
√
-
定时器的线圈
TC
TC100,TC200
10
√
√
-
定时器的当前值
TN
TN100,TN200
10
√
×
-
累计定时器的触点
SS
SS100,SS200
10
√
√
-
累计定时器的线圈
SC
SC100,SC200
10
√
√
-
累计定时器的当前值
SN
SN100,SN200
10
√
×
-
计数器的触点
CS
CS100,CS200
10
√
√
-
计数器的线圈
CC
CC100,CC200
10
√
√
-
计数器的当前值
CN
CN100,CN200
10
√
×
实例化三菱的Qna兼容3E帧协议的通讯对象
实例化一个三菱的Qna兼容3E帧协议的通讯对象
PLC的Ip地址
PLC的端口
网络号,通常为0
依据PLC的配置而配置,如果PLC配置了1,那么此处也填0,如果PLC配置了2,此处就填2,测试不通的话,继续测试0
网络站号,通常为0
依据PLC的配置而配置,如果PLC配置了1,那么此处也填0,如果PLC配置了2,此处就填2,测试不通的话,继续测试0
分析地址的方法,允许派生类里进行重写操作
地址信息
数据长度
解析后的数据信息
从三菱PLC中读取想要的数据,输入地址,按照字单位读取,返回读取结果
读取地址,格式为"M100","D100","W1A0"
读取的数据长度,字最大值960,位最大值7168
带成功标志的结果数据对象
地址支持的列表参考 的备注说明
假设起始地址为D100,D100存储了温度,100.6℃值为1006,D101存储了压力,1.23Mpa值为123,D102,D103存储了产量计数,读取如下:
以下是读取不同类型数据的示例
向PLC写入数据,数据格式为原始的字节类型
初始地址
原始的字节数据
假设起始地址为D100,D100存储了温度,100.6℃值为1006,D101存储了压力,1.23Mpa值为123,D102,D103存储了产量计数,写入如下:
以下是写入不同类型数据的示例
结果
从三菱PLC中批量读取位软元件,返回读取结果
起始地址
读取的长度
带成功标志的结果数据对象
地址支持的列表参考 的备注说明
向PLC中位软元件写入bool数组,返回值说明,比如你写入M100,values[0]对应M100
要写入的数据地址
要写入的实际数据,可以指定任意的长度
返回写入结果
远程Run操作
是否成功
远程Stop操作
是否成功
远程Reset操作
是否成功
读取PLC的型号信息
返回型号的结果对象
获取当前对象的字符串标识形式
字符串信息
将MC协议的核心报文打包成一个可以直接对PLC进行发送的原始报文
MC协议的核心报文
网络号
网络站号
原始报文信息
从PLC反馈的数据中提取出实际的数据内容,需要传入反馈数据,是否位读取
反馈的数据内容
是否位读取
解析后的结果对象
三菱MC协议的虚拟服务器,支持M,X,Y,D,W的数据池读写操作,使用二进制进行读写操作
实例化一个mc协议的服务器
读取自定义的寄存器的值。按照字为单位
起始地址,示例:"D100","M100"
数据长度
byte数组值
写入自定义的数据到数据内存中去
地址
数据值
是否写入成功的结果对象
读取指定地址的bool数据对象
西门子的地址信息
带有成功标志的结果对象
读取指定地址的bool数据对象
三菱的地址信息
数组的长度
带有成功标志的结果对象
往指定的地址里写入bool数据对象
三菱的地址信息
值
是否成功的结果
往指定的地址里写入bool数组对象
三菱的地址信息
值
是否成功的结果
当客户端登录后,进行Ip信息的过滤,然后触发本方法,也就是说之后的客户端需要
网络套接字
终端节点
当收到mc协议的报文的时候应该触发的方法,允许继承重写,来实现自定义的返回,或是数据监听。
mc报文
返回的报文信息
从字节数据加载数据信息
字节数据
将数据信息存储到字节数组去
所有的内容
释放当前的对象
是否托管对象
返回表示当前对象的字符串
字符串信息
欧姆龙PLC的CIP协议的类,支持NJ,NX,NY系列PLC,支持tag名的方式读写数据
Instantiate a communication object for a OmronCipNet PLC protocol
Instantiate a communication object for a OmronCipNet PLC protocol
PLC IpAddress
PLC Port
返回表示当前对象的字符串
字符串数据
欧姆龙的Fins协议的数据类型
实例化一个Fins的数据类型
进行位操作的指令
进行字操作的指令
进行位操作的指令
进行字操作的指令
DM Area
CIO Area
Work Area
Holding Bit Area
Auxiliary Bit Area
欧姆龙PLC通讯类,采用Fins-Tcp通信协议实现
实例化之后,使用之前,需要初始化三个参数信息,具体见三个参数的说明:,,
第二个需要注意的是,当网络异常掉线时,无法立即连接上PLC,PLC对于当前的节点进行拒绝,如果想要支持在断线后的快速连接,就需要将
设置为True,详细的可以参考
如果在测试的时候报错误码64,经网友 上海-Lex 指点,是因为PLC中产生了报警,如伺服报警,模块错误等产生的,但是数据还是能正常读到的,屏蔽64报警或清除plc错误可解决
地址支持的列表如下:
地址名称
地址代号
示例
地址进制
字操作
位操作
备注
-
DM Area
D
D100,D200
10
√
√
-
CIO Area
C
C100,C200
10
√
√
-
Work Area
W
W100,W200
10
√
√
-
Holding Bit Area
H
H100,H200
10
√
√
-
Auxiliary Bit Area
A
A100,A200
10
√
√
-
EM Area
E
E0.0,EF.200,E10.100
10
√
√
实例化一个欧姆龙PLC Fins帧协议的通讯对象
实例化一个欧姆龙PLC Fins帧协议的通讯对象
PLCd的Ip地址
PLC的端口
设备的Ip地址信息
信息控制字段,默认0x80
系统使用的内部信息
网络层信息,默认0x02,如果有八层消息,就设置为0x07
PLC的网络号地址,默认0x00
PLC的节点地址,这个值在配置了ip地址之后是默认赋值的,默认为Ip地址的最后一位
假如你的PLC的Ip地址为192.168.0.10,那么这个值就是10
PLC的单元号地址
通常都为0
上位机的网络号地址
上位机的节点地址,假如你的电脑的Ip地址为192.168.0.13,那么这个值就是13
假如你的电脑的Ip地址为192.168.0.13,那么这个值就是13
上位机的单元号地址
设备的标识号
如果设置为True,当数据读取失败的时候,会自动变更当前的SA1值,会选择自动增加,但不会和DA1一致,本值需要在对象实例化之后立即设置。
将普通的指令打包成完整的指令
根据类型地址长度确认需要读取的指令头
起始地址
长度
是否是位读取
带有成功标志的报文数据
根据类型地址以及需要写入的数据来生成指令头
起始地址
真实的数据值信息
是否是位操作
带有成功标志的报文数据
在连接上欧姆龙PLC后,需要进行一步握手协议
连接的套接字
初始化成功与否
和服务器交互完成的时候调用的方法,无论是成功或是失败,都将会调用,具体的操作需要重写实现
读取结果
从欧姆龙PLC中读取想要的数据,返回读取结果,读取单位为字
读取地址,格式为"D100","C100","W100","H100","A100"
读取的数据长度
带成功标志的结果数据对象
假设起始地址为D100,D100存储了温度,100.6℃值为1006,D101存储了压力,1.23Mpa值为123,D102,D103存储了产量计数,读取如下:
以下是读取不同类型数据的示例
向PLC写入数据,数据格式为原始的字节类型
初始地址
原始的字节数据
结果
假设起始地址为D100,D100存储了温度,100.6℃值为1006,D101存储了压力,1.23Mpa值为123,D102,D103存储了产量计数,读取如下:
以下是写入不同类型数据的示例
从欧姆龙PLC中批量读取位软元件,返回读取结果
读取地址,格式为"D100","C100","W100","H100","A100"
读取的长度
带成功标志的结果数据对象
向PLC中位软元件写入bool数组,返回值说明,比如你写入D100,values[0]对应D100.0
要写入的数据地址
要写入的实际数据,可以指定任意的长度
返回写入结果
返回表示当前对象的字符串
字符串
Omron PLC的FINS协议相关的辅助类
解析数据地址,Omron手册第188页
数据地址
是否是位地址
解析后的结果地址对象
根据读取的地址,长度,是否位读取创建Fins协议的核心报文
地址,具体格式请参照示例说明
读取的数据长度
是否使用位读取
带有成功标识的Fins核心报文
根据写入的地址,数据,是否位写入生成Fins协议的核心报文
地址内容,具体格式请参照示例说明
实际的数据
是否位数据
带有成功标识的Fins核心报文
验证欧姆龙的Fins-TCP返回的数据是否正确的数据,如果正确的话,并返回所有的数据内容
来自欧姆龙返回的数据内容
是否读取
带有是否成功的结果对象
验证欧姆龙的Fins-Udp返回的数据是否正确的数据,如果正确的话,并返回所有的数据内容
来自欧姆龙返回的数据内容
是否读取
带有是否成功的结果对象
获取错误信息的字符串描述文本
错误码
文本描述
欧姆龙的Udp的数据对象
如果在测试的时候报错误码64,经网友 上海-Lex 指点,是因为PLC中产生了报警,如伺服报警,模块错误等产生的,但是数据还是能正常读到的,屏蔽64报警或清除plc错误可解决
地址支持的列表如下:
地址名称
地址代号
示例
地址进制
字操作
位操作
备注
-
DM Area
D
D100,D200
10
√
√
-
CIO Area
C
C100,C200
10
√
√
-
Work Area
W
W100,W200
10
√
√
-
Holding Bit Area
H
H100,H200
10
√
√
-
Auxiliary Bit Area
A
A100,A200
10
√
√
实例化一个默认的欧姆龙Udp的对象
Ip地址
端口号
实例化一个默认的欧姆龙Udp的对象
设备的Ip地址信息
信息控制字段,默认0x80
系统使用的内部信息
网络层信息,默认0x02,如果有八层消息,就设置为0x07
PLC的网络号地址,默认0x00
PLC的节点地址,这个值在配置了ip地址之后是默认赋值的,默认为Ip地址的最后一位
假如你的PLC的Ip地址为192.168.0.10,那么这个值就是10
PLC的单元号地址
通常都为0
上位机的网络号地址
上位机的节点地址,假如你的电脑的Ip地址为192.168.0.13,那么这个值就是13
假如你的电脑的Ip地址为192.168.0.13,那么这个值就是13
上位机的单元号地址
设备的标识号
将普通的指令打包成完整的指令
根据类型地址长度确认需要读取的指令头
起始地址
长度
是否是位读取
带有成功标志的报文数据
根据类型地址以及需要写入的数据来生成指令头
起始地址
真实的数据值信息
是否是位操作
带有成功标志的报文数据
从欧姆龙PLC中读取想要的数据,返回读取结果,读取单位为字
读取地址,格式为"D100","C100","W100","H100","A100"
读取的数据长度
带成功标志的结果数据对象
假设起始地址为D100,D100存储了温度,100.6℃值为1006,D101存储了压力,1.23Mpa值为123,D102,D103存储了产量计数,读取如下:
以下是读取不同类型数据的示例
从欧姆龙PLC中批量读取位软元件,返回读取结果
读取地址,格式为"D100","C100","W100","H100","A100"
读取的长度
带成功标志的结果数据对象
向PLC写入数据,数据格式为原始的字节类型
初始地址
原始的字节数据
结果
假设起始地址为D100,D100存储了温度,100.6℃值为1006,D101存储了压力,1.23Mpa值为123,D102,D103存储了产量计数,读取如下:
以下是写入不同类型数据的示例
向PLC中位软元件写入bool数组,返回值说明,比如你写入D100,values[0]对应D100.0
要写入的数据地址
要写入的实际数据,可以指定任意的长度
返回写入结果
返回表示当前对象的字符串
字符串
开放以太网协议
实例化一个默认的对象
使用指定的IP地址来初始化对象
Ip地址
端口号
连接上服务器后需要进行的初始化操作
网络套接字
是否初始化成功,依据具体的协议进行重写
自定义的命令读取
返回表示当前对象的字符串
字符串信息
构建一个读取的初始报文
松下PLC的MC协议的信息,具体的地址格式请参考备注说明
地址的输入的格式说明如下:
地址名称
地址代号
地址示例一
地址范围
字操作
位操作
-
输入继电器
X
X0000,X100F
X0000~X109F
√
√
-
输出继电器
Y
Y0000,Y100F
Y0000~Y109F
√
√
-
链接继电器
L
L0000,L100F
L0000~L0127F
√
√
-
内部继电器
R
R0000,R100F
R0000~R511F,R9000~R951F
√
√
-
数据存储器
D
D100,D200
D0~D65532,D90000~D90999
√
×
-
链路寄存器
LD
LD0,LD100
LD0~LD255
√
×
-
定时器(当前值)
TN
TN100,TN200
TN0~TN1023
√
×
-
定时器(接点)
TS
TS100,TS200
TS0~TS1023
√
√
-
计数器(当前值)
CN
CN100,CN200
CN0~CN1023
√
×
-
计数器(接点)
CS
CS100,CS200
CS0~CS1023
√
√
实例化松下的的Qna兼容3E帧协议的通讯对象
实例化一个基恩士的Qna兼容3E帧协议的通讯对象
PLC的Ip地址
PLC的端口
分析地址的方法,允许派生类里进行重写操作
地址信息
数据长度
解析后的数据信息
返回表示当前对象的字符串
字符串信息
使用了Fetch/Write协议来和西门子进行通讯,该种方法需要在PLC侧进行一些配置 ->
Using the Fetch/write protocol to communicate with Siemens, this method requires some configuration on the PLC side
与S7协议相比较而言,本协议不支持对单个的点位的读写操作。如果读取M100.0,需要读取M100的值,然后进行提取位数据
地址支持的列表如下:
地址名称
地址代号
示例
地址进制
字操作
位操作
备注
-
中间寄存器
M
M100,M200
10
√
×
-
输入寄存器
I
I100,I200
10
√
×
-
输出寄存器
Q
Q100,Q200
10
√
×
-
DB块寄存器
DB
DB1.100,DB1.200
10
√
×
-
定时器的值
T
T100,T200
10
√
×
-
计数器的值
C
C100,C200
10
√
×
实例化一个西门子的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存储了产量计数,读取如下:
以下是读取不同类型数据的示例
读取指定地址的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数据,地址格式为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存储了产量计数,写入如下:
以下是写入不同类型数据的示例
向PLC中写入bool数组,返回值说明,比如你写入M100,那么data[0]对应M100.0 ->
Write the bool array to the PLC, return the value description, for example, if you write M100, then data[0] corresponds to M100.0
起始地址,格式为M100,I100,Q100,DB1.100 -> Starting address, formatted as M100,I100,Q100,DB1.100
要写入的实际数据,长度为8的倍数 -> The actual data to write, a multiple of 8 in length
是否写入成功的结果对象 -> Whether to write a successful result object
批量写入bool数组存在一定的风险,原因是只能批量写入长度为8的倍数的数组,否则会影响其他的位的数据,请谨慎使用。 ->
There is a risk in bulk writing to a bool array, because it is possible to write arrays of multiples of length 8 in bulk, otherwise it will affect the data of other bits, please use sparingly.
向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
返回表示当前对象的字符串 -> Returns a String representing the current object
字符串数据 -> String data
计算特殊的地址信息
字符串信息
实际值
解析数据地址,解析出地址类型,起始地址,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
西门子的PLC类型,目前支持的访问类型
1200系列
300系列
400系列
1500系列PLC
200的smart系列
200系统,需要额外配置以太网模块
一个西门子的客户端类,使用S7协议来进行数据交互 ->
A Siemens client class that uses the S7 protocol for data interaction
地址支持的列表如下:
地址名称
地址代号
示例
地址进制
字操作
位操作
备注
-
中间寄存器
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
√
√
未测试通过
对于200smartPLC的V区,就是DB1.X,例如,V100=DB1.100
实例化一个西门子的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设置的
PLC的机架号,针对S7-400的PLC设置的
连接上服务器后需要进行的二次握手操作 -> Two handshake actions required after connecting to the server
网络套接字 -> Network sockets
是否初始化成功,依据具体的协议进行重写 ->
Whether the initialization succeeds and is rewritten according to the specific protocol
从PLC读取订货号信息 -> Reading order number information from PLC
CPU的订货号信息 -> Order number information for the CPU
对PLC进行热启动
是否启动成功的结果对象
对PLC进行冷启动
是否启动成功的结果对象
对PLC进行停止
是否启动成功的结果对象
从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 ->
Starting address, formatted as I100,M100,Q100,DB20.100
读取的数量,以字节为单位 -> The number of reads, in bytes
是否读取成功的结果对象 -> Whether to read the successful result object
对于200smartPLC的V区,就是DB1.X,例如,V100=DB1.100
假设起始地址为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个数组的长度,所以不再对外公开该方法
西门子的地址对象
返回的结果对象信息
读取指定地址的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的位是否通断
读取指定地址的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
参考的注释
基础的写入数据的操作支持 -> 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存储了产量计数,写入如下:
以下是写入不同类型数据的示例
写入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 ->
Write the bool array to the PLC, for example, if you write M100, then data[0] corresponds to M100.0
起始地址,格式为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数组存在一定的风险,原因是只能批量写入长度为8的倍数的数组,否则会影响其他的位的数据,请谨慎使用。
向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
向设备中写入字符串,编码格式为ASCII
数据地址
字符串数据
是否写入成功的结果对象
以下为三菱的连接对象示例,其他的设备读写情况参照下面的代码:
读取西门子的地址的字符串信息,这个信息是和西门子绑定在一起,长度随西门子的信息动态变化的
数据地址,具体的格式需要参照类的说明文档
带有是否成功的字符串结果类对象
返回表示当前对象的字符串 -> Returns a String representing the current object
字符串信息 -> String information
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协议的虚拟服务器,支持TCP协议,无视PLC的型号,所以在客户端进行操作操作的时候,选择1200或是1500或是300或是400都是一样的。
地址支持的列表如下:
地址名称
地址代号
示例
地址进制
字操作
位操作
备注
-
中间寄存器
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
√
√
未测试通过
对于200smartPLC的V区,就是DB1.X,例如,V100=DB1.100
你可以很快速并且简单的创建一个虚拟的s7服务器
当然如果需要高级的服务器,指定日志,限制客户端的IP地址,获取客户端发送的信息,在服务器初始化的时候就要参照下面的代码:
服务器创建好之后,我们就可以对服务器进行一些读写的操作了,下面的代码是基础的BCL类型的读写操作。
高级的对于byte数组类型的数据进行批量化的读写操作如下:
更高级操作请参见源代码。
实例化一个S7协议的服务器,支持I,Q,M,DB1.X 数据区块的读写操作
读取自定义的寄存器的值
起始地址,示例:"I100","M100"
数据长度
byte数组值
写入自定义的数据到数据内存中去
地址
数据值
是否写入成功的结果对象
读取指定地址的字节数据
西门子的地址信息
带有成功标志的结果对象
将byte数据信息写入到指定的地址当中
西门子的地址信息
字节数据信息
是否成功的结果
读取指定地址的bool数据对象
西门子的地址信息
带有成功标志的结果对象
往指定的地址里写入bool数据对象
西门子的地址信息
值
是否成功的结果
当客户端登录后,进行Ip信息的过滤,然后触发本方法,也就是说之后的客户端需要
网络套接字
终端节点
从字节数据加载数据信息
字节数据
将数据信息存储到字节数组去
所有的内容
释放当前的对象
是否托管对象
返回表示当前对象的字符串
字符串信息
埃夫特机器人的数据结构
实例化一个默认的对象
报文开始的字符串
数据命令
数据心跳
报警状态,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,此协议为定制版,使用前请测试
实例化一个默认的对象,并指定IP地址和端口号,端口号通常为8008
Ip地址
端口号
获取发送的消息的命令
字节数组命令
读取埃夫特机器人的原始的字节数据信息,该地址参数是没有任何作用的,随便填什么
无效参数
带有成功标识的byte[]数组
读取机器人的所有的数据信息,返回JSON格式的数据对象,地址参数无效
地址信息
带有成功标识的字符串数据
本机器人不支持该方法操作,将永远返回失败,无效的操作
指定的地址信息,有些机器人可能不支持
原始的字节数据信息
是否成功的写入
本机器人不支持该方法操作,将永远返回失败,无效的操作
指定的地址信息,有些机器人可能不支持
字符串的数据信息
是否成功的写入
读取机器人的详细信息,返回解析后的数据类型
结果数据信息
返回表示当前对象的字符串
字符串
埃夫特机器人对应型号为ER7B-C10,此协议为旧版的定制版,使用前请测试
实例化一个默认的对象,并指定IP地址和端口号,端口号通常为8008
Ip地址
端口号
获取发送的消息的命令
字节数组命令
读取埃夫特机器人的原始的字节数据信息,该地址参数是没有任何作用的,随便填什么
无效参数
带有成功标识的byte[]数组
读取机器人的所有的数据信息,返回JSON格式的数据对象,地址参数无效
地址信息
带有成功标识的字符串数据
本机器人不支持该方法操作,将永远返回失败,无效的操作
指定的地址信息,有些机器人可能不支持
原始的字节数据信息
是否成功的写入
本机器人不支持该方法操作,将永远返回失败,无效的操作
指定的地址信息,有些机器人可能不支持
字符串的数据信息
是否成功的写入
读取机器人的详细信息
结果数据信息
返回表示当前对象的字符串
字符串
Kuka机器人的数据交互对象,通讯支持的条件为KUKA 的 KRC4 控制器中运行KUKAVARPROXY 这个第三方软件,端口通常为7000
非常感谢 昆山-LT 网友的测试和意见反馈。
实例化一个默认的对象
实例化一个默认的Kuka机器人对象,并指定IP地址和端口号,端口号通常为7000
Ip地址
端口号
读取埃夫特机器人的原始的字节数据信息,该地址参数是没有任何作用的,随便填什么
无效参数
带有成功标识的byte[]数组
读取机器人的所有的数据信息,返回JSON格式的数据对象,地址参数无效
地址信息
带有成功标识的字符串数据
本机器人不支持该方法操作,将永远返回失败,无效的操作
指定的地址信息,有些机器人可能不支持
原始的字节数据信息
是否成功的写入
本机器人支持该方法操作,根据实际的值记性返回
指定的地址信息,有些机器人可能不支持
字符串的数据信息
是否成功的写入
将核心的指令打包成一个可用于发送的消息对象
核心命令
最终实现的可以发送的机器人的字节数据
返回表示当前对象的字符串
字符串
安川机器人的Ethernet 服务器功能的通讯类
实例化一个默认的对象
Ip地址
端口号
根据地址读取机器人的原始的字节数据信息
指定的地址信息,对于某些机器人无效
带有成功标识的byte[]数组
根据地址读取机器人的字符串的数据信息
地址信息
带有成功标识的字符串数据
根据地址,来写入设备的相关的数据
指定的地址信息,有些机器人可能不支持
原始的字节数据信息
是否成功的写入
根据地址,来写入设备相关的数据
指定的地址信息,有些机器人可能不支持
字符串的数据信息
是否成功的写入
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即可,注意,所有的命令不带换行符
命令的内容
命令数据内容
最终的结果内容,需要对IsSuccess进行验证
读取机器人的报警信息
原始的报警信息
读取机器人的坐标数据信息
原始的报警信息
返回表示当前对象的字符串
字符串信息
系统的字符串资源及多语言管理中心 ->
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