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

    前言


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

    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")
    

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

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

    高效数据交互-长连接


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

    三菱的

    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

  • 相关阅读:
    删除所有空白列 cat yum.log | awk '{$1=$2=$3=$4=null;print $0}'>>yum.log1 sed ‘s/[ ]*$//g' 删除所有空格 sed -i s/[[:space:]]//g yum.log
    make clean 清除之前编译的可执行文件及配置文件。 make distclean 清除所有生成的文件。
    ipmitool -I lanplus -H 10.1.81.90 -U admin -P admin mc reset cold
    netperf对比
    iozone
    CentOS 7 vs. CentOS 8 版本差异大比拼
    seajs模块化jQuery与jQuery插件【转】
    教你怎么写jQuery的插件
    Jquery特效之=》仿京东多条件筛选特效
    sql FOR XML PATH('')
  • 原文地址:https://www.cnblogs.com/dathlin/p/9028109.html
Copyright © 2011-2022 走看看