2018年工业信息安全技能大赛(东北赛区)解题报告——梯形图运算

by LauCyun Aug 7,2018 10:11:15 17,132 views

前面,《2018年工业信息安全技能大赛(东北赛区)解题报告——工业网络数据分析》介绍了工业控制网络流量部分的解题思路,而本文将介绍梯形图运算部分的解题思路。

0x01 梯形图运算1(200分)

1 赛题描述

赛题如图1所示,附件下载:question_1531222405_8edje2o39d3d.zip


图1 赛题7

启动M0.01DB1.DBD8的运算结果,结果为十六进制结果。

2 解题思路

该题目为工业领域常见的梯形图分析,属于应用编程类的题目,可以使用针对的工控编程软件将其打开进行分析。本题是由西门子STEP7-Micro/Win编写的梯形图算法,有条件的同学可以直接使用STEP7-Micro/Win软件进行分析,没有的同学也不要灰心,请看下面的分析过程。

本题目一并给出了程序的源文件及程序截图,我们可以直接看截图并分析,如图2所示:


图2 程序段1-3

上图2中的内容由三段程序组成,我们一次来分析;

2.1 程序段1分析

本段程序只是一个简单的自锁程序,当M0.01时,Q0.0的输出为1,并且由于Q0.0的输出变成自己的输出,则Q0.0一直保持1的输出。

所以,通过第一段程序,我们知道一旦有M0.01,则Q0.0会一直保持输出。

2.2 程序段2分析

接下来在分析第二段程序的内容:

首先这段程序使用了S_PEXT处理模块,S_PEXT模块是扩展定时器模块,当输入S1时,Q的输出会在TV时间段内保持1的输出,当TV的计时时间到,A的输出就是变为0

所以,在Q0.0保持输出的时间内,Q0.1会产生一个1秒的方波,即Q0.1会维持一个1S内输出为1的状态。

2.3 程序段3分析

首先这段程序使用了MOVE处理模块,MOVE是一个赋值运算器,但输入信号EN1时,MOVE模块会将IN的输入值赋值给OUT指定的存储单元。

所以,此时根据前两段的输出结果,此时DB1.DBD0会被赋值为5.045000e+001

2.4 程度段4分析

程序段如下图3所示:


图3 程序段4-5

首先这段程序继续使用了MOVE处理模块。

所以,在前三段的运行结果上,程序段4的运行结果为DB1.DBD4的值为4.000000e+001

2.5 程序段5分析

首先这段程序使用了MUL_R处理模块,MUL_R处理模块是一个浮点数运算模块,其将IN1IN2的值相乘之后,将值赋值给OUT

所以,在前4段运行结果的基础上,程序段5的运行结果为50.45x40 = 2018,最后将2018换成十六进制为0x07E2

0x02 梯形图运算2(300分)

1 赛题描述

赛题如图4所示,附件下载:question_1531222212_aQiWuoVymW2TtMOY.zip


图4 赛题6

启动M10.01tag_10的运算结果,结果为十六进制结果。

2 解题思路

同样,本题也是梯形图分析,我们可以直接看截图并分析,如图5所示:


图5 程序段1

2.1 程序段1分析

在这里使用到一个TON延时定时器,该定时器为当输入IN1时,定时器开始工作,并大于定时时间pt时,Q输出为1。当IN输入为0时,定时器停止工作并清零。

所以,这段程序是当M10.01时,M10.1会产生一个时间为1秒的方波。并且%MW100的数值为5

2.2 程序段2分析

接下来在分析第二部图型图内容,如图6所示:


图6 程序段2-3

首先这段程序使用CTU处理模块,CTU模块是只加计数器,当输入CU有一个上升沿的时候,就会对CV的输出进行加1处理。当CV的数据达到PV的上限的时候,CV就不再进行计算处理,并且此时Q的输出为1,其他时间Q的输出都为0

所以,程序段2的内容就是%MW110M10.1的脉冲下进行累加1处理,当大于%MW100的时候不在进行运算处理,而此时的%MW110的输出结果为5

2.3 程序段3分析

首先,这段程序使用了MUL处理模块,MUL是一个乘法运算器,但输入信号EN1时,IN1IN2进行乘法运算,并将结果输出到%MW120中。

所以,本段程序的内容就是当M10.11时,并且%MW110中的数据大于或者等于%MW100时,对%MW110中的数据与100相乘并赋值给%MW120中。

此时根据前两段的输出结果,这里的输出结果%MW120的结果为500

2.4 程度段4分析


图7 程序段4

首先,这段程序使用了SWAP处理模块和OR处理模块,SWAP处理模块时将IN的数据的高低字节进行交互,如0x1234的交换结果为0x3412OR处理模块时对IN1的数据与IN2的数据进行OR(与操作)。如0x0012 OR 0x1200的处理结果就是0x1212

所以,本段程序的分析结果就是对%MW120的数据进行高低字节交换后赋值给%MW130。当程序段2中的计数器计算完之后,将%MW130%MW120的数据进行OR操作,并叫最终结果输出到%MW140中,这个就是我们要寻找的结果。

根据程序段3的结果,此时%MW120的数值为500,转换成十六进制是0x01F4,而%MW130的结果为0xF401,在经过OR操作后,%MW140的最终结果就是0xF401 OR 0x01F4运算结束后的结果为0xF5F5

Tags