关于HslCommunication组件的双模式客户端的说明,此说明适用于所有的派生类客户端,包括三菱,西门子,欧姆龙,modbustcp,机器人,simplifyNet客户端等等

摘要:
此外,Omron还需要为连接指定一些其他参数信息。一旦实例化了所有客户端访问类并指定了相关参数,就可以了解如何读取和写入数据。以下是几个示例:Mitsubishi MelsecMcNetmelsec_net=newMelsecMcNet;//然后可以直接调用shortvalue=melsec_net.ReadInt16.Content;西门子S7NetsiemensTcpNet=newSiemens S7Net//那么,shortvalue=siemensTcpNet。ReadInt16.直接调用Content;OmronFinsNetomronFinsNet=newOmronFins Net//然后短值=omronFins Net。ReadInt16.直接调用Content;ModbusTcp=newModbusTcpNetbusTcpClient//然后可以直接调用shortvalue=busTcpCClient。ReadInt16.内容;SimplifyNet。如果未指定令牌,则NetSimplifyClientsimplifyClient=newNetSimplify Client//然后可以直接调用stringrad=simplifyClient。ReadFromServer等。其他数据访问派生类支持此模式。

前言


 本文主要是答疑文章,针对广大网友非常频繁的提问而总结的问题

nuget地址:https://www.nuget.org/packages/HslCommunication/       nuget     下载

github地址:https://github.com/dathlin/HslCommunication      fork      star                     如果喜欢可以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")

等等,其他的数据访问派生类都是支持这种模式的。这种是短连接的机制,主要的使用逻辑如下:

关于HslCommunication组件的双模式客户端的说明,此说明适用于所有的派生类客户端,包括三菱,西门子,欧姆龙,modbustcp,机器人,simplifyNet客户端等等第5张

也就是说,每次数据请求的时候都要重新连接服务器,然后才开始真正的数据请求,然后再关闭连接。很显然,网络的连接和关闭都是消耗资源的,但是这么做有个好处,没有重新连接的困扰,每次都是新的服务器请求,只要读取失败了,就可以认为是网络已经掉线了,其他的也没有什么可以说的了,接下来看看比较复杂的长连接。

高效数据交互-长连接


为了解决上述的短连接的弊端。当然,如果你对访问频率没有要求,基本就是每秒一次,网络又不是很稳定的情况下,还是挺适合短连接的,如果对读写的速度要求很高,网络又比较好的情况下,无疑是不适合短连接的。怎么使用长连接呢,我们还是举一些例子

三菱的

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("连接失败");
}

然后讲讲这个程序的背后的思路,比短连接复杂一些

关于HslCommunication组件的双模式客户端的说明,此说明适用于所有的派生类客户端,包括三菱,西门子,欧姆龙,modbustcp,机器人,simplifyNet客户端等等第6张

对调用者来说,其实都是循环的调用就可以了,正常情况下和短连接的调用方法都是一致的,问题就是出现在了我本来好好的数据请求中,突然网络不行了,然后我下一次读取失败了,这时候,不用着急,继续循环读取就可以了,内部有逻辑,如果上次读取的时候发生了网络故障,通常因为断线,对方强制关闭,导致的。那么在下次读取的时候,会自动先去连接服务器,如果成功了,那么这次的数据交互自然也就成功了,如果连接失败了,那么在下下次读取的时候又会重连,直到成功为止。

延迟启动长连接


上面的长连接的模式,还有个小小的瑕疵,我在切换长连接时必须要连接服务器,但是我的软件可能并不是立马进行读取的,可能过很久之后才开始读取数据,所以本组件也支持手动设置长连接,直到第一次读取数据的时候才开始连接服务器,后面的操作就是和上面的一致了。整个逻辑就是这个样子的

关于HslCommunication组件的双模式客户端的说明,此说明适用于所有的派生类客户端,包括三菱,西门子,欧姆龙,modbustcp,机器人,simplifyNet客户端等等第7张

原理就是调用一个方法,设置为长连接模式,等待真正进行数据交互的时候,才真的连接到服务器进行读取。

异形模式


由于PLC永远不会主动连接的能力,所以异形模式只适用于Modbus客户端,因为Modbus里有支持主动连接的服务器,具体参照

http://www.cnblogs.com/dathlin/p/8934266.html

免责声明:文章转载自《关于HslCommunication组件的双模式客户端的说明,此说明适用于所有的派生类客户端,包括三菱,西门子,欧姆龙,modbustcp,机器人,simplifyNet客户端等等》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇kindEditor上传图片错误,不成功的问题总结SqlServer nvarchar中的中文字符匹配,更改SqlServer实例和数据库排序规则的办法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

boost.asio简单入坑

网络连接有短连接和长连接。顾名思义,connect之后一直不断开的是长连接,像公司用的数据Route模块;三次握手建立连接后收发一次数据后就断开,断开是四次握手,再次收发数据就再来三次握手建立连接是短连接。每种模式都有优缺点。短连接优点是:如果客户端数量大的话,可以让每个客户轮流请求到数据。缺点:每次连接(三次握手)断开(四次握手)都耗费资源。长连接相对的...

Netty5 HTTP协议栈浅析与实践

一、说在前面的话 前段时间,工作上需要做一个针对视频质量的统计分析系统,各端(PC端、移动端和 WEB端)将视频质量数据放在一个 HTTP 请求中上报到服务器,服务器对数据进行解析、分拣后从不同的维度做实时和离线分析。(ps:这种活儿本该由统计部门去做的,但由于各种原因落在了我头上,具体原因略过不讲……) 先用个“概念图”来描绘下整个系统的...

使用云开发数据库构建更生动的小程序

长连接服务被广泛应用在消息提醒、即时通讯、推送、直播弹幕、游戏等场景。本篇文章将介绍云开发数据库的长连接服务 - 实时数据推送,使用它来构建更生动的小程序。 什么是实时数据推送 通过云开发数据库的实时数据推送能力,小程序端可实时监听数据库变更,即它支持根据开发者给定的查询语句进行监听,每当查询语句的结果发生变化时,小程序端就会收到包含更新内容的推送,并对实...

squid各种超时配置项详解

connect_timeout 官方解释:TCP的建联超时时间 适用场合:squid 回源与源站建联超时时间,适用于回源方向。 默认配置:connect_timeout 1 minute request_timeout 官方解释:建立连接后的请求超时时间。 适用场景:客户端与squid建联后的,squid判断客户端请求的超时的时间,即squid多...

Mysql 的 长连接? 短连接?

什么是短连接? 短连接是指程序和数据库通信时需要建立连接,执行操作后,连接关闭。短连接简单来说就是每一次操作数据库,都要打开和关闭数据库连接,基本步骤是:连接 →数据传输 →关闭连接。 什么是长连接? 长连接是指程序之间的连接在建立之后,就一直打开,被后续程序重用。使用长连接的初衷是减少连接的开销,尽管MySQL的连接比其他数据库要快得多。 以PHP程序为...

什么是session?

Session一般译作会话。从不同的层面看待session,它有着类似但不全然相同的含义。比如,在web应用的用户看来,他打开浏览器访问一个电子商务网站,登录、并完成购物直到关闭浏览器,这是一个会话。而在web应用的开发者开来,用户登录时我需要创建一个数据结构以存储用户的登录信息,这个结构也叫做session。因此在谈论session的时候要注意上下文环境...