测试梯形逻辑

12
我们都知道测试面向对象系统的各种方法。然而,看起来我将要做一个项目,其中我将处理PLC梯形逻辑(别问我为什么 :/),我想知道是否有一种好的方法来测试系统的有效性。
到目前为止,我唯一能想到的方法就是简单地构建一个包含系统所有已知状态及其生成的输出状态的巨大表格。这对于简单的“如果输入A打开,则打开输出B”的情况可能行得通。但我不认为这对于更复杂的结构会起作用。
5个回答

6
“逻辑”系统在集成电路设计领域的验证被称为“设计验证”,这是确保硬件(RTL)中设计的系统实现所需功能的过程。
梯形逻辑可以转换为现代HDL之一,例如Verilog。将每个梯形进行转换。
|---|R15|---+---|/R16|---------(R18)--------|
|           |
|---|R12|---+

转换成类似于表达式的形式

always @(*) R18 = !R16 && ( R15 | R12);

或者您可以使用赋值语句。
assign R18 = R16 && (R15 | R12); 

一个保持继电器
assign R18 = (set condition) || R18 && !(break condition);

然后使用免费的Verilog模拟器Icarus开发测试平台并测试您的系统。确保您的测试用例良好地覆盖了您的逻辑代码!如果您的梯形图编辑软件提供了良好的命名功能,请使用它们,而不是Rnn。
(注:在PLC梯形逻辑约定中,Rnn是用于内部继电器的,而Xnn是输入,Ynn是输出,可以从在线教程中快速获得这些信息)
Verilog将是更容易开发测试和测试平台的语言!
在编程时加入一些单位延迟可能会有帮助。
抱歉,我从未寻找过梯形逻辑到/从Verilog的翻译器..但是在我的日子里,梯形逻辑只是被放入计算机中以编程PLC-我使用的大多数继电器系统都是REAL Relays,布线到机柜中!
祝你好运。 jbd
有几个免费的梯形图编辑器(带有模拟器)可供选择..这是一个据说可以在Windows上运行的编辑器:

http://cq.cx/ladder.pl


非常好!我希望很快就能尝试这个模拟器。 - Erik van Brakel

3
我们已经尝试过适用于Rockwell Control Logix控制器的测试覆盖工具。大多数过程语言的测试覆盖工具都是分支覆盖或类似的方式;因为继电器梯形逻辑通常不会分支,所以这种方法效果不佳。
我们原型开发了适用于Rockwell控制器的RLL代码的MC/DC(修改/条件/决策覆盖)工具。对于每个梯级中的条件,它告诉我们该条件是否被测试为TRUE,测试为FALSE,并且更重要的是,该条件是否在某些测试下控制了梯级中决策的输出(至少是由决策控制的动作)。
这项工作使用了一个通用的程序分析和转换工具DMS来为RLL代码添加额外的逻辑以收集必要的数据。
您仍然需要编写单元测试。最简单的方法是获取另一个PLC作为机械硬件的替代品,并编写另一个RLL程序来执行第一个程序。

0

有一个名为LogixPro的程序,其中包含了梯形图的IO模拟器,你可以试试。


0
有时在小型PLC程序中,项目中会编写一个测试程序(或子例程或梯形文件),仅在仿真项目时运行。该文件具有一些简单的逻辑,当输出被激活时,打开与反馈相关联的输入。然后,您可以通过连接到其上的任何HMI来控制PLC,并查看代码是否按预期运行。非常重要的是,在将软件下载到实际现场时禁用或删除测试程序,因为它可能会在现实世界中产生非常奇怪的结果。
在较大的项目中,每个设备都有一个模拟模式,执行类似的操作。http://www.batchcontrol.com/s88/01_tutorial/06-modules.shtml 这与使用OO语言的测试框架完全不同,但我实际上没有看到过针对PLC的测试驱动开发,甚至没有太多自动化测试。

0

我的老板经常告诉我,测试是内置于逻辑本身的。PLC实际上是确定性的,因此您应该能够实际上遵循逻辑而不需要模拟测试。然而,我们并不完美。拥有框架只会让我们按照我们已知的步骤进行,梯形逻辑只需要练习才能理解PLC的工作原理。

话虽如此,我确实在一个程序中取得了一些好成果,这个程序基本上是将IO打开和关闭,甚至可以模拟编码器的计数以测试物体到达位置时会发生什么。它有断言语句可以触发,并告诉我我的逻辑错误在哪里。它确实捕捉到了一些错误,对于我从未接触过的系统,那个实现非常成功。它本身非常有益,我认为它可能有用,但我已经变得更加熟练,所以我发现自己不需要它了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接