前言
在手上没有真实的西门子PLC设备情况的情况下,PLC本地仿真器可以为我们进行开关量和简单模拟量的程序仿真。但工控安全人员想在没有真实PLC的条件下获取S7通讯数据报文的时候,或者想测试第三方上位软件与西门子PLC通讯的时候,这种本地的PLC仿真器就无法胜任了,本文分享一种西门子PLC的网络仿真器搭建方法。
二、搭建方法
这里我们准备两个虚拟机,操作系统都为win7 64位版:1、操作机(准备Snap7 Client Demo工具及组态王软件,采用IP地址)2、靶机(安装了step7 v5.5及plcsim v5.4 sp5,采用IP地址)。
在靶机中打开SIMATIC Manager软件,新建项目test2,如下图:
在新建项目test2点击插入新对象,并选择SIMATIC 300站点,如下图:
分别点击SIMATIC300(1)>硬件,进入硬件配置界面,如下图:
在HW Config界面下选择SIMATIC 300,并选择RACK-300下的Rail,如下图:
在UR(0)对话框中的序号槽1中点击右键分别插入对象PS 307 2A,如下图:
在UR(0)对话框中的序号槽2中点击右键分别插入对象CPU 314C-2PN/DP V3.3,,并新建子网设置ip地址为本PC级的IP地址,如下图:
启动虚拟PLC,点击开始>所有程序>Siemens Automation>SIMATIC>STEP 7>S7-PLCSIM,如下图:
进入S7-PLCSIM界面,选择PLCSIM(TCP/IP),如下图:
回到HW Config对话框,选择下载到模块,如下图:
待下载完成,PLCSIM会显示PLC的地址为之前设置的IP地址,如下图:
启动NetToPLCSIM,点击bin>NetToPLCSim.exe,进入如下图:
点击add,弹出station对话框,在Network IP Address及Plcsim IP Address中选择IP地址为之前设置的ip地址,进入如下图:
点击Start Server,PLC#001进入运行状态,表示PLC网络仿真器搭建成功进入如下图:
三、攻击测试
在操作机中打开Snap7 Client Demo工具,填写仿真PLC的IP地址如:,点击Connect,如下图:
再在control下点击stop按钮即停止PLC的命令,如下图:
查看靶机中仿真PLC的状态从run变为stop,同时可以用wireshark抓取其数据流量如下图:
也可以在python中构建STOP包进行测试,如下图:
四、第三方上位软件通讯测试
在靶机()的仿真PLC建立了这样一段简单图形图代码,一个简单的设备启停控制逻辑程序,%M0.0、%M0.1是指PLC的M类型的寄存器,0.0、0.1是M寄存器的某两个偏移地址,对应中间变量。%Q0.0是PLC的Q类型的寄存器,0.0是Q寄存器的某个偏移地址。在这个控制程序中,%M0.0(变量名为start)对应是监控画面上的启动按钮,进行对设备的启动操作,%M0.1(变量名为stop)对应是监控画面上的停止按钮,进行对设备的停止操作。%Q0.0(变量名为out),对应PLC的输出,即将控制信号输出给设备。如下图:
程序下载到仿真PLC后,对梯形图代码进行在线监控,这时输出为0,如下
在操作机()中定义仿真PLC的IP地址及寄存器的地址,如下图:
定义监控画面如下:
按下start按钮,圆形显示变为绿色,证明我们按钮发出的指令,仿真PLC收到启动信号,将输出置为1,并将仿真PLC输出的结果反馈到监控画面,同时我们监控靶机中仿真PLC的程序,我们发现仿真PLC输出也是为1,证明操作机中组态王上位机与靶机中的虚拟机通讯成功,如下图
同时我们可以获取操作机的组态王(192。168.11.2)与靶机PLC仿真器()的通讯报文,各类功能码的数据报文,根据具体的操作。
五、总结
本文通过研究西门子PLC的网络仿真搭建方法,为工控安全人员研究西门子s7协议提供一个便捷、实惠的渠道,无需花费大量的资金采购真实的PLC设备,同时也可为PLC工程师提供一种测试第三方上位软件与西门子通讯的方法,更为重要的是,这种西门子PLC的网络仿真搭建方法,可以胜任多人在局域网络中对西门子PLC的安全研究工作(例如实训平台),只需启动更多的靶机和操作机即可。