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

  在使用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模块输出的结果相当于调用了一个函数,在函数内部值可以保存,但是退出函数后,数据就看不到了。这个特性和函数里面定义的变量比较像,一个具有全局属性,一个具有局部属性。

  • 10
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值