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

PSIM软件中 Simplified C Block模块 和 C Block模块区别相关推荐

  1. PSIM软件学习---02 原件模型

      PSIM软件中虽然在元件工具栏中可有找到常用的元器件,但是还有好多特殊的元器件没有,所有就必须在元件模型库中去找.   元器件的查找有两种方法,第1种方法是在菜单栏中查找,Elements菜单中包 ...

  2. QuartusII开发软件中的宏模块

    Quartus II开发软件中的宏模块--存储器宏模块 RAM宏模块 宏模块名称   功能描述 csdpram    参数化循环共享双端口RAM lpm_ram_dp   参数化双端口RAM lpm_ ...

  3. Quartus II开发软件中的宏模块 (转摘)

    Quartus II开发软件中的宏模块 (转摘) RAM宏模块 宏模块名称   功能描述 csdpram    参数化循环共享双端口RAM lpm_ram_dp   参数化双端口RAM lpm_ram ...

  4. UG软件中针对汽车产品开发的模块

    UG软件中针对汽车产品开发的模块 1 汽车产品开发技术及发展方向 目前对先进制造技术尚没有一个明确的.一致公认的定义,经过近年来对发展先进制造技术方面开展的工作,通过对其特征的分析研究,可以认为:先进 ...

  5. 20210325BERNESE软件中LEO_POD模块说明

    1.流程图如下图所示: 2.主要步骤为: 下载观测数据.精密星历.精密钟差.ERP文件.DCB文件.ATT文件等. 由GPS精密星历建立BERNESE自定义格式的卫星标准轨道. 将GPS观测数据转化为 ...

  6. 在VisualStudioCode软件中使用babel命令后显示模块不存在的解决方案

    1.在原项目目录下将显示不存在的模块删除,然后手动重新创建新文件夹,并命名,即构建出了新模块. 2.注意在敲babel命令时,要在babel命令所作用的模块所在的父模块下打开终端,然后在该终端下执行b ...

  7. 在通用计算机系统中系统软件,在通用的财务软件中,账务处理功能模块与其他子系统模块主要是以的形式进行数据传递的 答案:记账凭证...

    相关问题 下列哪一种墙的形式不属于独立式的墙垣? 购物篮分析中,数据是以的形式呈现: 购物篮 分析 中 数据 形式 变量 灭火器按其移动形式可分为:手提式和推车式.: 灭火器 移动 形式 创新思维的重 ...

  8. PSIM软件BUCK转换数字控制官方例程

      在使用PSIM软件仿真开关电源时,大多数都是模拟电路,纯数字电路的仿真很少.无意间发现了在PSIM 2021版本中有官方的数字控制BUCK电路仿真.电路使用简单C模块编写的代码来控制电路.   由 ...

  9. PSIM软件学习---08 C程序块的调用

      在PSIM电路仿真的时候,如果某一功能不能够使用元件库中的电路元件模型构建,可以使用C程序元件,编写C程序代码实现.其中C语言模块包括简化C模块和通用C模块.C程序模块使用方法如下. 简化C模块 ...

最新文章

  1. java内部类和静态内部类的区别
  2. Xamarin XAML语言教程通过数据绑定使用Progress属性
  3. OVS DPDK vhost-user详解(十一)
  4. 使用java代码发送电子邮件
  5. 我与TCP连接不得不说的故事
  6. 开源短地址_如何在短短5分钟内完成您的第一个开源贡献
  7. pytorch clamp 与clamp_区别
  8. css用边框实现圆角矩形
  9. pthread_getspecific和pthread_setspecific使用:同一线程内的各个函数间共享数据
  10. React Native版本升级
  11. 腾讯掀起史上最大一轮管理干部裁撤:从月入2万+到领4千工资的中年们
  12. team多网卡绑定、桥接的搭建、tcpdump抓包
  13. 计算机考试科目一模拟试题,学车科目一模拟考试,最全答题知识点,送给准备考驾照的你...
  14. 2013年台式计算机型号,2013cpu天梯图,台式机处理器天梯图
  15. 求会java的大佬救一下场,领导让研究一个应用信息导出工具的代码实现原理,我之前没系统学过java,来个会的大佬帮忙解释下哈,跪谢...这个如果只是单纯实现抓取包名,应用名称的话代码可以怎么精简呀?
  16. 查看自己电脑应用对应的端口号
  17. VC中 WM_SHOWWINDOW 与ShowWindow()的区别
  18. HTML中的图片标签<img>
  19. 【简单应用】STC8+OLED(4P)显示
  20. 总结了 11 种 Numpy 的高级操作!

热门文章

  1. HTMLParser使用
  2. 多旋翼飞行器控制的难点
  3. proc文件系统探索 之 以数字命名的目录
  4. C# 多线程 学习
  5. Python3 GUI:PyQt5环境搭建
  6. 有一个分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和
  7. 通过配置hosts.allow和hosts.deny文件允许或禁止ssh或telnet操作
  8. eclipse代码格式化
  9. 每天学一点flash(70)弹出和关闭窗口
  10. MySQL索引、事物