PLC的信号处理或算法编程

时间:2012-12-17 01:10:06

标签: plc

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

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

2 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分:1)

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

我用过的一个好方法就是创建一个名为1秒或类似的程序。该程序将扫描所有输入,并执行所有信号处理,然后写入缓冲存储器位置。程序的其余部分查看那些缓冲的内存位置,并且从不直接监视输入。您可以将输入缓冲程序设置为根据流程的需要尽快执行,直至PLC在故障发生之前可以处理的任何内容。

将信号处理功能自己编写为Add On Instructions,然后使用您需要的任何参数调用它们,这也是一个好主意。

所以你可以拥有一个带有这样的调用界面的AOI:

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

这会调用input_smooth函数,使用input-1作为值,输入-1_buffered作为最终位置。 low_pass将在input_smooth函数中用于跳转到相应的逻辑。

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