PSIM软件中 Simplified C Block模块 和 C Block模块区别

x33g5p2x  于2022-02-18 转载在 其他  
字(1.3k)|赞(0)|评价(0)|浏览(606)

在使用PSIM的C语言模块时,一直以为Simplified C Block模块 和 C Block模块用法基本是一样的,但是今天在仿真BUCK电路时,同样的代码使用C Block模块仿真结果就正常,使用Simplified C Block模块仿真的结果始终都不对。于是通过几个小测试,发现这两个模块使用起来差别还是挺大的。

下面就来分析对比一下这两个C模块的区别。

  分别使用 C Block模块和Simplified C Block模块写个简单的测试程序。

  在 C Block模块中,初始化时定义一个变量cnt,然后在函数中每次给变量加1,最后输出变量的值。

  在 Simplified C Block模块中,定义一个变量cnt,然后每次给变量加1,最后输出变量的值。

C Block模块和Simplified C Block模块代码在每个时间步长间隔中都会被系统调用一次。系统的时间参数设置如下:

  时间步长为1us,也就是每1us系统就会调用一次模块。系统总仿真时间为0.01s,也就是说仿真在0.01s之后就会停止。

下面看这两个模块的输出结果。

  C Block模块的输出值随着时间一直增加,而Simplified C Block模块的值一直是1。由于系统会每1us调用一次模块,C Block模块中的变量值一直增加,说明C Block模块的这个变量是全局变量。而Simplified C Block模块的值一直是1,说明Simplified C Block模块中的变量时局部变量,相当于一个函数,每次调用的时候,值都会被重新初始化,要保持值不变,就需要将值设置为静态变量。

  将Simplified C Block模块中的值修改为静态变量,然后再次查看波形。

  这时两个模块的值都会随着时间的增加而逐渐增加的。

难道仅仅是全局变量和局部变量的区别吗?下面再用BUCK电路的代码测试一下。

  为了测试简单,这里省略了硬件电路,输入的两路信号都设置为固定值。然后通过PID算法计算误差,在通过输出端口输出。

C Block模块代码如下:

  Simplified C Block模块代码如下:

  这两个模块里面的算法是一样的,唯一的区别就是把Simplified C Block模块里面的变量全部定义为静态变量。运行结果如下:

  V1是C Block模块的输出曲线,V2是Simplified C Block模块的输出结果,将波形放大观察。

  可以看到V1的输出结果是一直维持不变的,直到下一次新的结果到来。而V2的输出结果只是在代码执行的过程中输出一次,一但代码执行结束,那么输出值就直接变成了0。相当于V1的输出结果有锁存功能,V2输出结果没有锁存功能。虽然V2每次计算的结果是正确的,但是由于结果不能保存,就会导致在BUCK电流闭环控制中执行结果不正确。

通过这个测试可以发现C Block模块输出的结果也相当于是全局变量,会一直保存在内存中,而Simplified C Block模块输出的结果相当于调用了一个函数,在函数内部值可以保存,但是退出函数后,数据就看不到了。这个特性和函数里面定义的变量比较像,一个具有全局属性,一个具有局部属性。

相关文章