【问题标题】:Signal processing or algorithmic programming for a PLCPLC 的信号处理或算法编程
【发布时间】:2012-12-04 03:12:46
【问题描述】:

我有一个应用程序,它将电压和温度作为模拟输入,并使用涉及信号处理(例如低通滤波)的算法进行一些处理, 指数平滑,以及通常可能在高级编程语言(如 C 或 C++)中完成的其他步骤。

我很好奇如何使用 PLC,尤其是 Allen-Bradley Control-Logix 系统来执行这些相同的步骤?在我看来,带有梯形逻辑的指令集对此太有限了。我可以使用结构化文本执行此操作吗?

【问题讨论】:

  • 可能会有一些不足之处,但 RSLogix 支持 Visual Basic 脚本。我对它的经验为零,但可能有比 PLC 编码更好的东西。
  • @BenMordecai:你可以在 in RSLogix 中运行 VisualBasic 吗?我惊呆了。我曾经在罗克韦尔自动化公司的高级开发实验室担任顾问科学家,但我从来没有想过这样的想法。你确定吗?为什么有人愿意这样做?
  • @IraBaxter 再次查看它,这存在于 RSLogix 500 中,但不是 5000。所以我的评论不适用于使用 Control Logix 的人。我不知道为什么会有人想要运行 Visual Basic,更不用说处理旧 Windows 软件中的宏了。
  • 我可以想象有人会想要运行 VB 来支持开发 IDE; Rockwell 在 PC 上的开发工具可以追溯到 80 年代后期。但不是在工厂车间控制器中;它能做什么?

标签: plc


【解决方案1】:

梯形逻辑可以很好地完成计算,尽管它不是世界上最好的编程语言。它有完整的条件、算术、数组等。

您真正的问题是使您的计算适合大多数梯形逻辑引擎(和 Control Logix)运行的循环执行模型:在控件中从上到下重复执行程序,每个梯级或计算只执行一次每次扫描。

如果您需要在生成结果之前重复循环一组值,您可能很难解决梯形图引擎每次扫描“只执行一次”所有内容的愿望,并且您需要执行一个循环来生成一个结果。事实上,我相信有 FOR 循环运算符可以像传统循环一样重复一段梯形代码;您需要确保循环/算法所花费的时间不会对扫描速率产生重大影响。

对您来说,让扫描率作为您的循环之一可能会奏效;通常,您通过将新值接受到数组中然后在该数组上计算结果来计算过滤器。由于无论如何您基本上不能接受比每个扫描周期更快的值,因此您可以在每个扫描周期计算最多一个过滤器结果而不会丢失任何精度。如果您的数组大小适中(例如,10 个值),您实际上可以简单地将数组上的多项式编码为方程以产生您的过滤器结果,然后将该多项式(klunkily 但直接)编码为梯形逻辑。

【讨论】:

  • 我是 PLC 编程新手,感谢您的建议。我相信这将是一个很大的帮助。
  • 如果您继续向下滚动,这个en.wikipedia.org/wiki/Low-pass_filter 有一个基本的结构化文本实现示例。这将数学分解为足够简单的步骤,您应该能够使用 RSLogix 指令进行复制。
【解决方案2】:

Control Logix PLC 不必执行循环扫描。我现在没有 RSLogix 5000,但是在定义项目时,您需要创建一个循环扫描执行的程序。但是您可以创建其他没有的程序。您还可以通过触发器(对常规输入扫描无用)或固定计时器(对输入扫描非常有用)运行它们。请记住,将输入扫描计时器设置得比仪器更新更快是没有意义的 - 现代 PLC 执行扫描的速度通常比仪表更新数据的速度快得多。

我为此使用的一个很好的技术是创建一个名为 one-second 或类似名称的程序。该程序将扫描您的所有输入,并执行所有信号处理,然后写入缓冲内存位置。程序的其余部分查看那些缓冲的内存位置,从不直接监视输入。您可以将输入缓冲程序设置为尽可能快地执行您的流程,直到 PLC 在出现故障之前可以处理的任何事情。

最好将信号处理函数自己编写为附加指令,然后使用所需的任何参数调用它们。

因此,您可以拥有一个具有如下调用接口的 AOI:

input-1_buffered := input_smooth (low_pass, input-1);

这将调用您的 input_smooth 函数,使用 input-1 作为值,使用 input-1_buffered 作为最终位置。 low_pass 将在 input_smooth 函数中用于跳转到适当的逻辑。

然后,您可以在结构化文本中编写实际的平滑逻辑,而无需任何人理解,因为它只会存在于那个 AOI 中。

【讨论】:

    猜你喜欢
    • 2013-11-19
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-19
    • 2012-06-16
    相关资源
    最近更新 更多