python编程与下位机通讯_基于Modbus协议实现Openplc与Kingview的仿真通讯与模拟测试...

本文介绍了如何通过OpenPLC模拟Modbus协议与组态王(Kingview)进行通讯仿真。在Kali Linux虚拟机中安装OpenPLC和OpenPLC_Editor,编写并下载程序,然后在Windows XP虚拟机上安装组态王并建立工程,设定变量并与OpenPLC连接。通过监控和实际操作,验证了电机启动和停止的通讯成功。此外,还利用Wireshark抓包分析Modbus协议,并编写Python攻击包以模拟通讯效果。
摘要由CSDN通过智能技术生成
一、前言

工业控制系统离不开上位机监控系统和下位机控制器即PLC,上位机软件相对比较容易获得,比如本文采用kingview6.53,但PLC的获得相对来说就没有那么轻松,考虑这种情况,本文借助一款模拟工业自动化环境的开源软件OpenPLC基于modbus协议实现与组态王的通讯仿真。同时基于环境进行模拟测试,对组态王的组态画面、OpenPLC Editor梯形图简单编程进行简单介绍,亲测效果不错。

二、环境准备

( 1 ) Kali linux虚拟机(IP:192.168.180.146)安装OpenPLC

安装过程参考:

https://github.com/thiagoralves/OpenPLC_v3

安装后,Kali linux虚拟机内置浏览器输入如下地址,账户/密码:openplc/openplc。

5481e46d7f3ec7b5744a543c15288704.png

( 2 ) Kali linux虚拟机(IP:192.168.180.146)安装OpenPLC_Editor,安装过程参考https://github.com/thiagoralves/OpenPLC_Editor,安装后,在应用里面搜索OpenPLC_Editor,打开后,编写简单程序如下,下载链接:openplc_test.st。

a9ce2b421144b88a6ecbbb655b265c54.png

1df499c2fd17e51eaa5570e0b4ead055.png

( 3 ) winxp sp3虚拟机(IP:192.168.180.157)安装组态王6.53,新建test工程下载链接https://github.com/sxd0216/kingview—test,并按下图所示添加OpenPLC设备OpenPLC_test。

271353ae99f483019e8fa2ef0e336807.png

b9cb4c878bbd85e3eb19cc8b99d55f05.png

cade097fbcd14190d8c99d91dd7935b3.png

fa9fa8a4832c27663e4d739be0410c30.png

4b9056ddd8e8d3c1e7c1fcb2542f2377.png

( 4 ) 设定变量并和OpenPLC_test连接

9076d24a865cae048d00898eaee00bc4.png

0559d6d34ca4eb8965022e98142e42e7.png

( 5 ) 组态简单画面,点击Start,电机运行,点击Stop,电机停止

3d00736f529cfc76d93c09a276450867.png

三、仿真通讯

( 1 ) Kali linux虚拟机(IP:192.168.180.146)中运行OpenPLC,导入OpenPLC_Editor编辑好的程序openplc_test.st。

282e35dccae4e56b982786aee6d18079.png

58974b5bda824e290193cc7fcf6154ae.png

待程序编译好后,Go to Dashboard,然后Start PLC

6fb6c6eab49bcfadf241a8684af34ba3.png

4fa22338bf2031a1f8c98e3d3352bf3b.png

待PLC出现Running后,进入Monitoring

49ef91e229ddc12edba0ba5ae06252b6.png

4d601cfbefcd7d82a731bdef72a946cb.png

( 2 ) winxp sp3虚拟机(IP:192.168.180.157)中运行test工程

2be3d7f75ccf8d56a43ae6492d136078.png

3ee47e9545ff797f3078e7cbb8961f32.png

( 3 ) 通过信息窗口查看,已经通讯成功

16eec6452cdaf6582708d40de5707fea.png

( 4 ) 点击Start后,指示灯亮,电机启动,进入PLC,发现Start和MV1变量值已经变为TRUE,对比图如下:

5ac754be4cc01d1011abbba324399ea4.png

86e373d69d16be6846f4f549b2a4d5c7.png

dab641028980bb0d5f40a90d3b7e34d0.png

( 5 ) 点击Stop后,指示灯灭,电机停止,进入PLC,发现Start和MV1变量值已经变为FALSE,Stop变量值变为TRUE,对比图如下:

58b1349604959c571c347703f7091858.png

090f34fab1104c2b94c78ce8d66ac604.png

e317cc9b65e1318fb98874911fc3c810.png

四、模拟测试

( 1 ) winxp sp3虚拟机(IP:192.168.180.157)中利用wireshark抓取03.仿真通讯中Start(14帧、16帧)和Stop(19帧、21帧)的数据包,下载链接https://github.com/sxd0216/attack-packets。

c601cf86d00379e5900bc2d44f5712c4.png

821130f915d7cb907648c1bc2c209234.png

查看数据包,搜索modbus协议”05”功能码Write Coil,捕获到Start(14帧、16帧)和Stop(19帧、21帧)的攻击数据包,modbus协议常用功能码如下:

01 :读取线圈状态

02:读取输入状态

03:保持型寄存器读取

05:写单一线圈

06:写单一寄存器

( 2 ) 基于wireshark捕获的Write Coil,编写Python攻击包,下载链接https://github.com/sxd0216/attack-packets。

fd04d5e941ce1239778dff906f722a18.png

31c7687d1efae9e6aa8518751c9201f8.png

( 3 ) 利用攻击包也可以达到(4)和(5)的效果

五、总结

本文主要利用OpenPLC模拟modbus协议实现了OpenPLC实现了与Kingview的通讯仿真与模拟测试,大家如果感兴趣也可以基于OpenPLC模拟其他协议,进而仿真其他环境;同时本文也对kingview如何建立工程、组态画面,OpenPLC Editor编辑简单梯形图程序进行了简单介绍,希望对热爱工控的人士有所帮助。

本文作者:fangyu0216 原文来源:FreeBuf

c2f2c6c71863902045305d7e64f192a8.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值