n
介绍:
本文包含一个如何计算连续函数 f(x) 在 X 轴上的零点的 S7-SCL 程序。在功能块 FB1 “Solve”中有两种数学方法可以计算零点。n
- 等分法n
- 割线法
图 01 显示了一个连续函数在完整区间 [a, b] 的曲线图,其在左端小于零,其在右端大于零。很明显,由于曲线没有跳跃并连续,其必然要与 X 轴交叉一次。这也就意味着函数 f(x) 在 (a, b) 区间内至少有一次零值。n
等分法
此方法适用于在区间 I = [a, b] 连续的函数,并且此函数在端点 a 和 b 之间改变了符号,例如 f(a) * f(b) < 0。n
通过连续等分区间及实数来计算零点。n
根据中值定理,此例中包含一个 x0 € I, 满足f(x0) = 0。可以通过连续使用等分法至 f(x) 符号改变位置,来求得此 x0 的精确逼近。忽略条件是一个小的,为正的错误边界“e”:n
- 用(a + b) / 2 替代 x;n
- 如果 f(x) = 0, 跳转至 <状态 5>;n
- 如果 f(a) f(x) > 0,用 x 替代 a,否则用 x 替代 b;n
- 如果 |a - b| > e, 跳转至 <状态 1>;n
- 输出:(a + b) / 2
通过使用一个循环指令替代跳转指令可以改进上面的状态顺序,可以不使用 f(x) = 0 条件及不使用乘法指令:n
- 用 (a + b) / 2 替代 x;n
- 只要|a - b| > e;
- 如果 f(a) f(x) 同符号,用 x 替代 a,否则用 x 替代 b;n
- Replace x with (a + b) / 2;
- 输出:x
此运算仅在 n 步后逼近零点,此时e < (b - a) / 2n+1。n
割线法
此方法类似于等分法,适用于在区间 I = [a, b] 连续的函数。不同于等分法,不再使用(a + b) / 2 来选择 x,而是使用(a, f(a)) and (b, f(b))与X轴的交点来选择 x。n
根据割线,及 X 轴,Y 轴与 a ,b 的截距组成的图形,x 可以根据以下比例导出:n
- x - a b - x a f(b) - b f(a)
------ = -------,x = ---------------.
-f(a) f(b) f(b) - f(a)
下面是非正式的过程描述:n
- 只要|a - b| > e;
- 用行“•” 的表达式替代 x ;n
- 用 b 替代 a ;n
- 用 x 替代 b ;
- 输出:x
由于更多地计算“reference point”,割线法一般快于等分法。但特定的一些序列会使此方法变慢,例如,如果零点位于区间的边缘,并且曲线急剧上升。不同于等分法,条件 a < b 可以相反。n
程序描述:
下载包“Solution.zip” 包含一个 S7-SCL 编写的功能块 FB1 (S7-SCL source:“Solve”),其通过等分法及割线法计算零点。此处有 4 个应用程序的例子,FB10, FB11, FB12及 FB13 ( S7-SCL source: “Cases”)。n
- Case 1: FB10, DI10n
- Case 2: FB11, DI11n
- Case 3: FB12, DI12n
- Case 4: FB13, DI13
FB1 查找此 4 个方程式的零点。下表描述了此 4 个例子的解决方法:n
情形: | 数学表达式: | 方法: | 开始位置: |
1 | Y = X3+8 | 割线法 | -10 to 10 |
2 | Y = 100.0(1+3.9083*10-3X-5.775*10-7X2-4.183*10-12X3(X-100))-18.493 | 等分法 | -300 to 0 |
3 | Y = X | 割线法 | -0.5 to 10 |
4 | Y = X3-2X-5 | 割线法 | -10 to 10 |
在 FB1 中调用 FC2 来初始化FB10, FB11, FB12及 FB13 的数据块,在 OB1 中每次调用 FB1 使用一个背景数据块来对应于每个应用例子。类似于 FB 及 DI 的编号,DB块地址,要把起始位置参数分配给FB1。n
- 在情形 1 中调用 FB1, DI1(FB10, DI10)n
- 在情形 2 中调用 FB1, DI2(FB11, DI11)n
- 在情形 3 中调用 FB1, DI3(FB12, DI12)n
- 在情形 4 中调用 FB1, DI4(FB13, DI14)
零点的输出值存储在 FB1 的背景数据块中。图 03 显示了例子应用1 (Y = X3+8)的变量表。输出值,当 X= -2时, Y= 0,并存储在DB1.DBD30及 DB1.DBD34。为了完成此结果,功能块需要 27 次内部操作及大概 1ms 的运行时间。n
对于每个要集成在 STEP7 项目中的数学连续函数,必须生成一个功能块,从 FB10 至 FB13。可以在 S7-SCL 源文件生成它,或将其集成在S7-SCL 源文件“Cases”中。必须在 SIMATIC Manager 为这些新的 FB 组态背景数据块。相应于每个应用例子,OB1 每次调用 FB1,都需另外指定一个背景数据块给 FB1,并赋予相应的参数(FB 编号,DI编号,起始位置等等)。
下载:
附件“Solution.zip”包括一个上面描述的 STEP7 项目。将“Solution.zip”文件复制到一个单独目录。该 STEP7 V5.4 项目会自动解压缩所有相关的子目录。可以使用 SIMATIC Manager 来打开和测试解包的项目。
Solution.zip ( 42 KB )
运行及测试环境:
程序例子可以被 SIMATIC S7-300,S7-400,,C7和 WinAC 的 CPU 使用,下表列出了在生成本条目及校验功能的过程中使用的组件。
测试环境: | 版本: |
PC 平台 | Intel(R) Pentium(R) M Processor 1.73 GHz, 1.49 GB RAM |
PC 操作系统 | MS Windows XP SP2 |
STEP 7 | V5.4 SP1 |
选项包S7 PLCSIM | V5.3 SP1 |
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc336897.html