关于HslCommunication组件的双模式客户端的说明,此说明适用于所有的派生类客户端,包括三菱,西门子,欧姆龙,modbustcp,机器人,simplifyNet客户端等等
前言
本文主要是答疑文章,针对广大网友非常频繁的提问而总结的问题
nuget地址:https://www.nuget.org/packages/HslCommunication/
github地址:https://github.com/dathlin/HslCommunication
如果喜欢可以star或是fork,还可以打赏支持。
联系作者及加群方式(激活码在群里发放):http://www.hslcommunication.cn/Cooperation
在Visual Studio 中的NuGet管理器中可以下载安装,也可以直接在NuGet控制台输入下面的指令安装:
Install-Package HslCommunication
NuGet安装教程 http://www.cnblogs.com/dathlin/p/7705014.html
最简单的使用-短连接
在使用读写数据功能之前,自然是要实例化对象的,然后指定IP地址和端口号的,比如西门子,不需要指定端口好像也能访问,因为内部初始化默认值102了。还有欧姆龙的连接还要指定一些其他的参数信息,所有的客户端访问类只要实例化并指定了相关的参数后,可以理解进行读写数据了,下面随便举几个例子:
三菱的
MelsecMcNet melsec_net = new MelsecMcNet( "192.168.0.188",6000 ); // 然后就可以直接调用了
short value = melsec_net.ReadInt16("D1000").Content;
西门子的
SiemensS7Net siemensTcpNet = new SiemensS7Net( SiemensPLCS.S1200, "192.168.0.100" ); // 然后就是直接调用了
short value = siemensTcpNet.ReadInt16("M100").Content;
欧姆龙的
OmronFinsNet omronFinsNet = new OmronFinsNet( "192.168.0.100",6000 ); // 然后就是直接调用了
short value = omronFinsNet.ReadInt16("D100").Content;
Modbus Tcp的
ModbusTcpNet busTcpClient = new ModbusTcpNet( "192.168.0.100", 502, 0x01); // 然后就可以直接调用了
short value = busTcpClient.ReadInt16("100").Content;
SimplifyNet的,没有指定令牌的情况下
NetSimplifyClient simplifyClient = new NetSimplifyClient( "192.168.0.100",6000 ); // 然后就可以直接调用了
string read = simplifyClient.ReadFromServer( 1, "test")
等等,其他的数据访问派生类都是支持这种模式的。这种是短连接的机制,主要的使用逻辑如下:
也就是说,每次数据请求的时候都要重新连接服务器,然后才开始真正的数据请求,然后再关闭连接。很显然,网络的连接和关闭都是消耗资源的,但是这么做有个好处,没有重新连接的困扰,每次都是新的服务器请求,只要读取失败了,就可以认为是网络已经掉线了,其他的也没有什么可以说的了,接下来看看比较复杂的长连接。
高效数据交互-长连接
为了解决上述的短连接的弊端。当然,如果你对访问频率没有要求,基本就是每秒一次,网络又不是很稳定的情况下,还是挺适合短连接的,如果对读写的速度要求很高,网络又比较好的情况下,无疑是不适合短连接的。怎么使用长连接呢,我们还是举一些例子
三菱的
MelsecMcNet melsec_net = new MelsecMcNet( "192.168.0.188",6000 );
melsec_net.ConnectServer();
// 然后之后调用起来会非常的快
short value = melsec_net.ReadInt16("D1000").Content;
西门子的
SiemensS7Net siemensTcpNet = new SiemensS7Net( SiemensPLCS.S1200, "192.168.0.100" );
siemensTcpNet.ConnectServer();
// 然后之后调用起来会非常的快
short value = siemensTcpNet.ReadInt16("M100").Content;
欧姆龙的
OmronFinsNet omronFinsNet = new OmronFinsNet( "192.168.0.100",6000 );
omronFinsNet.ConnectServer();
// 然后之后调用起来会非常的快
short value = omronFinsNet.ReadInt16("D100").Content;
Modbus Tcp的
ModbusTcpNet busTcpClient = new ModbusTcpNet( "192.168.0.100", 502, 0x01);
busTcpClient.ConnectServer();
// 然后之后调用起来会非常的快
short value = busTcpClient.ReadInt16("100").Content;
SimplifyNet的,没有指定令牌的情况下
NetSimplifyClient simplifyClient = new NetSimplifyClient( "192.168.0.100",6000 );
simplifyClient.ConnectServer();
// 然后之后调用起来会非常的快
string read = simplifyClient.ReadFromServer( 1, "test")
等等,如果想要知道是否连接成功的话就参照下面的代码
OperateResult connect = client.ConnectServer();
if(connect.IsSuccess)
{
MessageBox.Show("连接成功");
}
else
{
MessageBox.Show("连接失败");
}
然后讲讲这个程序的背后的思路,比短连接复杂一些
对调用者来说,其实都是循环的调用就可以了,正常情况下和短连接的调用方法都是一致的,问题就是出现在了我本来好好的数据请求中,突然网络不行了,然后我下一次读取失败了,这时候,不用着急,继续循环读取就可以了,内部有逻辑,如果上次读取的时候发生了网络故障,通常因为断线,对方强制关闭,导致的。那么在下次读取的时候,会自动先去连接服务器,如果成功了,那么这次的数据交互自然也就成功了,如果连接失败了,那么在下下次读取的时候又会重连,直到成功为止。
延迟启动长连接
上面的长连接的模式,还有个小小的瑕疵,我在切换长连接时必须要连接服务器,但是我的软件可能并不是立马进行读取的,可能过很久之后才开始读取数据,所以本组件也支持手动设置长连接,直到第一次读取数据的时候才开始连接服务器,后面的操作就是和上面的一致了。整个逻辑就是这个样子的
原理就是调用一个方法,设置为长连接模式,等待真正进行数据交互的时候,才真的连接到服务器进行读取。
异形模式
由于PLC永远不会主动连接的能力,所以异形模式只适用于Modbus客户端,因为Modbus里有支持主动连接的服务器,具体参照
http://www.cnblogs.com/dathlin/p/8934266.html
关于HslCommunication组件的双模式客户端的说明,此说明适用于所有的派生类客户端,包括三菱,西门子,欧姆龙,modbustcp,机器人,simplifyNet客户端等等的更多相关文章
- HslCommunication组件库使用说明 (转载)
一个由个人开发的组件库,携带了一些众多的功能,包含了数据网络通信,文件上传下载,日志组件,PLC访问类,还有一些其他的基础类库. nuget地址:https://www.nuget.org/packa ...
- HslCommunication组件库使用说明
一个由个人开发的组件库,携带了一些众多的功能,包含了数据网络通信,文件上传下载,日志组件,PLC访问类,还有一些其他的基础类库. nuget地址:https://www.nuget.org/packa ...
- 如何理解Unity组件化开发模式
Unity的开发模式核心:节点和组件,组件可以加载到任何节点上,每个组件都有 gameobject 属性,可以通过这个属性获取到该节点,即游戏物体. 也就是说游戏物体由节点和组件构成,每个组件表示物体 ...
- 派生类&简单工厂模式
派生类&简单工厂模式 git链接: Operation3.1.1 题目描述的代码部分的解释 首先是声明一个Rand类作为父类,然后两个子类RandNumber类和RandOperation类, ...
- 3.3 建立松耦合组件(MVC 模式最重要的特性之一是它支持、关注“分离”)《精通 ASP.NET MVC 5》 推荐指数:8 星半
笔者通常希望应用程序中的组件尽可能独立,而只有很少几个可控的依赖项.—— 在理想情况下,每个组件都不了解其他组件,而只是通过抽象接口来处理应用程序的其他区域.这称为松耦合 .—— 它能够使应用程序更易 ...
- Unityclient框架笔记二(组件实体开发模式的思考)
Unity的Entity-Component-System实现的很美丽,很灵活.许多文章也对这样的组件实体的开发模式倍加推崇.由于它契合这么一条规则:优先使用组合而不是继承. 可是实际开发过程中,限制 ...
- vue-music 关于Player (播放器组件)--播放模式
播放器播放模式有三种,顺序播放,单曲循环,随机播放,定义在vuex 中的字段为 mode.点击切换播放模式的图标.切换模式判断是否为随机播放,如果是随机播放模式,则取得sequenceList 列表数 ...
- Android图片管理组件(双缓存+异步加载)
转自:http://www.oschina.net/code/snippet_219356_18887?p=3#comments ImageManager2这个类具有异步从网络下载图片,从sd读取本地 ...
- android自定义日期组件之双DatePicker
1.效果图(两个DatePicker放在一起,同时选择起始与结束时间): 2.实现 2.1布局文件: <?xml version="1.0" encoding="u ...
随机推荐
- [翻译]CSS模块-未来的编码方式
前言 这是Glen Maddern发布于2015年8月19日的一篇文章,主要是之前翻译的文章<理解CSS模块方法>里提到这篇文章,现在算是顺藤摸瓜跟进来看看. 这里的翻译都是根据我自己的理 ...
- v4l2的学习建议和流程解析
v4l2,一开始听到这个名词的时候,以为又是一个很难很难的模块,涉及到视频的处理,后来在网上各种找资料后,才发现其实v4l2已经分装好了驱动程序,只要我们根据需要调用相应的接口和函数,从而实现视频的获 ...
- kali2016.2安装后配置
接触kali有几个月了,总是有一种浅尝辄止的感觉.因为不常用,一些常用操作时常想不起来了.为日后查找方便,特通过写博客方式来记录. 新建虚拟机,和安装其它操作系统差别不大,按提示一步一步安装.第1次安 ...
- GCC精彩之旅
在为Linux开发应用程序时,绝大多数情况下使用的都是C语言,因此几乎每一位Linux程序员面临的首要问题都是如何灵活运用C编译器.目前Linux下最常用的C语言编译器是GCC(GNU Compile ...
- PHP爬取知乎日报图片显示不了问题
在爬取知乎日报的内容时,虽然能拿到图片的地址,在窗口中也能打开图片,但是在前端却显示不了,报403错误. 经查证,这是因为知乎对图片做了防盗链处理,其中一个解决方法是添加meta标签: <met ...
- [BZOJ1058]报表统计
Description 小Q的妈妈是一个出纳,经常需要做一些统计报表的工作.今天是妈妈的生日,小Q希望可以帮妈妈分担一些工 作,作为她的生日礼物之一.经过仔细观察,小Q发现统计一张报表实际上是维护一个 ...
- 数据结构实习 problem O Huffman Tree
Huffman Tree 题目描述 对输入的英文大写字母进行统计概率 然后构建哈夫曼树,输出是按照概率降序排序输出Huffman编码. 输入 大写字母个数 n 第一个字母 第二个字母 第三个字母 .. ...
- spring boot 国际化MessageSource
转自:https://blog.csdn.net/flowingflying/article/details/76358970 spring中ResourceBundleMessageSource的配 ...
- Struts2框架学习第三章——Struts2基础
本章要点 — Struts 1框架的基本知识 — 使用Struts 1框架开发Web应用 — WebWork框架的基本知识 — 使用WebWork框架开发Web应用 — 在Eclipse中整合To ...
- JavaScript权威指南--语句
知识要点 在javascript中,表达式是短语,那么语句(statement)就是整句或命令.表达式计算出一个值,但语句用来执行以使某件事发生. 1.表达式语句 具有副作用的表达式是JavaScri ...