我们都知道测试面向对象系统的各种方法。然而,看起来我将要做一个项目,其中我将处理 PLC 梯形图逻辑(不要问:/),我想知道是否有一个好的方法来测试系统的有效性。

到目前为止,我看到的唯一方法就是简单地构建一个巨大的表,其中包含系统的所有已知状态以及生成的输出状态。这适用于简单的“如果输入 A 打开,则打开输出 B”的情况。但我认为这不适用于更复杂的结构。

有帮助吗?

解决方案

IC 设计领域中“逻辑”系统的验证称为“设计验证”,这是确保您在硬件 (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模拟器,例如 伊卡洛斯 开发测试平台并测试您的系统。确保您的测试用例能够很好地覆盖您的逻辑代码!如果您的梯形图编辑软件为您提供了不错的命名功能,请使用它们,而不是 Rnn。

(笔记:在用于 PLC 的梯形逻辑约定中,Rnn 用于内部继电器,而 Xnn 是输入,Ynn 是输出,这可以从在线教程之一快速收集到。

Verilog 将成为一种更容易开发测试和测试平台的语言!

以某些单位延迟进行编程可能会有所帮助。

抱歉,我从未在 verilog 转换器之间寻找梯形逻辑。但在我那个时代,梯形图逻辑只是被放入计算机中用于对 PLC 进行编程 - 我使用的大多数继电器系统都是真正的继电器,接线到机柜中!

祝你好运。杰贝德

有几个免费的梯形图逻辑编辑器(带模拟器)。这是一个据说可以在 Windows 上运行的程序:

http://cq.cx/ladder.pl

其他提示

我们已经尝试了用于 Rockwell Control Logix 控制器的测试覆盖工具。大多数过程语言测试覆盖工具都会进行分支覆盖或类似的操作;因为继电器梯形逻辑通常不分支,所以这不能很好地工作。

我们的原型是 中/直流 (修改/条件/决策覆盖范围)用于罗克韦尔控制器的 RLL 代码。这表明,对于梯级中的每个条件,该条件是否已测试为 TRUE、测试为 FALSE,更重要的是,条件是否控制梯级中决策的输出(至少是决策控制的操作)在某些测试下,在正确和错误的方向上。

这项工作是使用通用程序分析和转换工具完成的数据管理系统 用于使用附加逻辑来检测 RLL 代码以收集必要的数据。

您仍然需要编写单元测试代码。最简单的方法是让另一个 PLC 来替代您想要控制的机械硬件,然后只需编写另一个 RLL 程序来执行第一个程序。

有一个叫LogixPro的程序,它有一个梯形逻辑的IO模拟器,你可以试试。

有时,在小型PLC程序上,测试程序(或子程序或梯形图文件)会写入项目中,仅在仿真项目时运行。该文件有一些简单的逻辑,表示当输出通电时,打开与反馈相关的输入。然后,您可以通过连接到 PLC 的任何 HMI 来控制 PLC,并查看代码是否按预期运行。当软件下载到真实站点时,禁用或删除测试程序非常重要,因为它可以在现实世界中执行非常奇怪的事情。

在较大的项目中,每个设备都有一个模拟模式,其功能略有相似。 http://www.batchcontrol.com/s88/01_tutorial/06-modules.shtml

这与使用 OO 语言的测试框架完全不同,但我还没有真正看到任何 PLC 的测试驱动开发,甚至没有太多的自动化测试。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top