一直想测试一下在外网中除了端口映射之外还有什么办法可以访问PLC,进行数据采集,因为端口映射有他的局限性,比如,我们在一个大的内网中,能够受控的路由器只有PLC系统的,如果要到上一级路由器做映射,可能完成不了。
首先,要通过一个可以上网的路由器把PLC和花生棒连接在一起,

绿色线是到PLC的,
上面的灰色线到花生棒,
接入网络工作正常的花生棒状态为绿色,如下图所示:

接入网络的PLC

PLC的IP地址设置如下:

在PLC内部编写ModbusTCP服务器程序,在缓冲区中的寄存器每秒自增加1,如果>150则归-10。


进入花生棒设置程序,设置自定义端口映射如下图

确认后,得到一个公网地址和端口号

拿到这个外网访问地址就可以进行上位机程序编写了,我采用的VS的C#来完成上位机测试程序的,程序代码如下:

为了显示几个温度,使用了MeasureMentstudio的温度显示控件。程序运行状态如下:

连接很顺利,一运行就连接上了。
觉得有点不可思议,太快了,那好吧,用wireshark监控一下,看看是什么数据,先Ping了一下地址,获取了一个真实的IP地址121.41.31.147,
启动Wireshark,得到刷屏的数据,看不懂啊,还是要加个过滤器
我们要的只有上面所述IP的数据,所以添加规则IP.des==121.41.31.147

可以看到数据了,截图了一张问询的数据和一个回复的数据,如下图

嗯,
就这样,结束,测试通过
问题:
在运行过程中ModbusTCP客户端出现过中断的情况,考虑到花生棒采用的是免费版的,网络状态不是很好,应该不存在其他问题。