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,
};