• 第0章:HslCommunication简介
  • V12版本特别说明
  • Java版本特别说明
  • Python版本特别说明
  • 第1章:学前必备基础
    • 基础数据类型的说明
    • 程序的本质
    • Socket长短连接
    • 控制台,winform,wpf
    • 用户界面和后台线程
    • 从代码到面向对象编程
    • 了解和使用反射和表达式树
    • C#语言的利器《泛型》
  • 第2章:HSL基础功能说明
    • 如何安装HSL
    • 如何激活HSL
    • OperateResult类说明
    • HSL扩展方法汇总
    • 日志记录功能
    • 统计日志功能
    • 数据的加密解密
  • 第3章:连接配置及地址说明
    • Modbus地址及特别说明
    • 三菱PLC的连接配置
    • 西门子PLC的连接配置
    • 欧姆龙PLC的连接配置
    • 倍福PLC的连接配置
    • 罗克韦尔PLC一些说明
  • 第4章:读写PLC进阶
    • 快速了解使用HSL
    • 多种数据类型的读写
    • 字符串及中文的读写
    • 原始字节及高性能读写
    • HSL的长短连接实现
    • 实时读取刷新数据
    • 读取上升沿,下降沿
    • 实时曲线的演示
    • 实时判断PLC是否在线
    • PLC判断上位机是否在线
    • 管道的使用以及通信锁
    • 基于HSL扩展自定义协议
    • 使用MQTT中转时读取PLC
    • 正确使用多线程
    • 正确的使用异步
    • 优化串口通信的性能
    • 当使用Lora访问设备时
    • 从云服务器访问本地PLC
    • 另一种MOXA串口驱动
  • 第5章:Mqtt服务器客户端
    • 连接和安全认证
    • 发布订阅模式
    • 远程RPC接口实现及调用
    • 文件传输实现
    • 通过RPC远程读写PLC实现
  • 第6章:HTTP服务器及Websocket
    • HTTP服务器实现及验证
    • 远程RPC接口实现及调用
    • 使用WebApi访问PLC
    • 使用Https服务
    • Websocket实现web数据更新
  • 第7章:高级技巧
    • CS架构客户端自动更新实现
    • 运行在Linux上
    • VC++调用HSL实现通信
    • Python调用C#版本HSL
    • 使用证书来控制API接口权限
    • Demo程序实现远程测试调试
    • 安卓手机APP采集
    • 虚拟PLC服务器的妙用
    • 一些辅助调试的属性
    • 一些疑难杂症的经验总结
Demo程序实现远程测试调试

正常模式下使用DEMO程序可以实现读取PLC,Modbus等设备的数据,指定了PLC的ip地址,或是串口号等等信息,然后就可以点击下面的读取,或是特殊功能码的测试了, 如下图所示,

我们测试没有问题了,这时候我们希望给另一个电脑(可以是局域网的另一个电脑,也可以是本机,只要网络能通就可以的)也提供远程访问功能, 让另一个电脑的DEMO程序也可以想本地测试那样进行调试,可以如下操作,注意主要 V12.3.0 版本及以上。 首先在DEMO程序上,打开如下界面进行操作

设置好端口号,然后点击启动服务,这时候就运行远程的DEMO程序进行连接操作,并读写了。端口号是上图所示,然后在远程的DEMO程序上,打开如下界面进行操作

需要进行如下三部分内容的设置,下面分别说明,1: 选择一致的测试界面,协议一致,2: 管道选择 Debug,3: 输入远程的IP地址,端口号,点击连接。 然后就可以点击读写测试了

此处为方便演示,所示就本机运行了,这么做有什么好处,它在某些特殊的情况下,是非常便捷的,下面是我们碰到的两个情况的经验分享,
1: PLC和现场电脑直连, 现场电脑通过内网连接办公室电脑,如果每次测试都需要跑现场,那就太麻烦了,借助于本章节内容,点击两下,就可以创建远程连接测试环境。,
2: 现场有个4G模块连接到你的DTU服务器了,在云服务器上开个DTU的设备界面,例如modbusrtu协议,那么每次都需要远程到云服务器才能读写数据, 现在参考本章节的内容,云服务器使用DEMO,打开DTU管道,测试没问题后,打开远程调试的启动服务后,就可以本地连接测试了。

如果使用代码怎么实现

我们先看服务器端的代码,非常的简单

        
            // 先创建PLC实例
            SiemensS7Net siemens = new SiemensS7Net( SiemensPLCS.S1200, "118.24.36.220" );

            DebugRemoteServer server = new DebugRemoteServer( );
            server.SetDeviceCommunication( siemens );
            server.ServerStart( 8000 );
        
    

你得远程客户端去连接的时候,就是指定下管道就可以的

        
            // 先创建PLC实例
            SiemensS7Net siemens = new SiemensS7Net( SiemensPLCS.S1200, "127.0.0.1" );
            siemens.CommunicationPipe = new PipeDebugRemote( "127.0.0.1", 8000 );

            OperateResult connect = siemens.ConnectServer( );

            // 然后就可以读取数据了
            OperateResult<short> read = siemens.ReadInt16( "M100" );
        
    
如果我们需要支持多个设备远程

上面的DEMO程序的演示是一个PLC设备配套一个 DebugRemoteServer 服务器的,如果我们想要支持多个PLC设备同时进行开启远程调试功能的话, 方法之一,就是实例化多个 DebugRemoteServer 服务器对象,每个PLC分别绑定不同的端口,当然了,这个方法会占用大量的端口。 另一个方法参考如下的代码,把每个 PLC 设备关联一个 ushort 类型的关键字,从 0 ~ 65535 理论共计支持这么多设备。

        
    class Program
    {
        static void Main( string[] args )
        {
            // 假设这里有四个设备需要进行调试,分别是西门子的S7协议,三菱的MC协议,ModbusTcp协议,ModbusRtu协议
            SiemensS7Net siemens = new SiemensS7Net( SiemensPLCS.S1200, "118.24.36.220" );
            MelsecMcNet melsec = new MelsecMcNet( "118.24.36.220", 6000 );
            ModbusTcpNet modbus = new ModbusTcpNet( "118.24.36.220", 502 );
            ModbusRtu modbusRtu = new ModbusRtu( );
            modbusRtu.SerialPortInni( "COM3-9600-8-N-1" );

            DebugRemoteServer server = new DebugRemoteServer( );
            // 下面分别添加四个设备的通信对象
            server.AddDeviceCommunication( 0, siemens );
            server.AddDeviceCommunication( 1, melsec );
            server.AddDeviceCommunication( 2, modbus );
            server.AddDeviceCommunication( 3, modbusRtu );
            server.ServerStart( 8000 );

            Console.ReadLine( );
        }
    }
        
    

服务器就这些代码就可以了。这样就支持多个客户端进行远程测试了,我们可以打开DEMO程序界面测试看看,在DEMO界面上,选择管道为 Debug 之后, 点击 More 来配置唯一关键字信息


然后就可以点击连接测试了,如果使用代码的话,查看这个界面

简化下代码,就是如下的代码信息,管道里有个属性 ClientKey 可以指示不同的设备信息。

        
HslCommunication.Profinet.Melsec.MelsecMcNet plc = new HslCommunication.Profinet.Melsec.MelsecMcNet( );
plc.CommunicationPipe = new HslCommunication.Core.Pipe.PipeDebugRemote("127.0.0.1", 8000)
{
    ConnectTimeOut = 5000,    // 连接超时时间,单位毫秒
    ReceiveTimeOut = 10000,    // 接收设备数据反馈的超时时间
    ClientKey = 1,
};
        
    
本篇文章目录 在线学习人数:0