Matlab程序导入Codesys PLC教程-CODESYS资源下载区-酷德网 - CoDeSys软件教程下载,CoDeSys工控资讯门户 

酷德网

HSC6150发布~
查看: 155|回复: 0

Matlab程序导入Codesys PLC教程

[复制链接]
  • TA的每日心情
    擦汗
    2019-8-13 14:13
  • 签到天数: 32 天

    [LV.5]常住居民I

    发表于 2020-8-4 16:02:56 | 显示全部楼层 |阅读模式

    在Matlab中仿真好的程序可以直接导入到PLC中,省去我们重新编程的时间,本文就通过一个简单的PID控制的例子来演示这一过程。

    1 Matlab中的操作

      在Matlab(2019b版本)中点击Simulink图标就能看到Simulink的启动页面,在搜索框中输入PID即可找到软件自带的例子,如下图所示。我们就以此为例进行讲解。

    20200209155357520.jpg 这个例子比较简单,只有一个PID控制器和一个二阶阻尼系统作为被控对象,如下图左。我们可以添加一个Scope示波器来查看控制效果,如下图右,可见被控系统的输出实现了对阶跃参考信号的跟踪。

    20200209160443881.jpg
    20200209160645535.jpg

    为了将仿真好的PID控制器导入到PLC中,下面我们对其进行配置。首先配置系统的仿真参数,打开系统参数配置页面(按Ctrl+E打开Configuration Parameters),在Solver selection项中将仿真类型Type改为Fixed-step。然后打开PID控制器模块的参数配置页面,将Time-domain改为离散时间,如下图所示。你也可以根据自己的经验修改PID的比例微分等增益,也可以选择是否对微分项进行滤波并设置滤波系数,在其它选项卡中还可以设置输出限幅、抗积分饱和等选项。


    2020020916161356.jpg
    配置好以后,我们回到仿真页面,在Controller模块上右键,选择PLC Code—>Enable “Treat as atomic unit”,把“Treat as atomic unit”勾选上,如下图所示。

    20200209162543968.jpg

    20200209162715162.jpg
    再次在模块上右键选择PLC Code—>Options,选择你的PLC平台,这里我使用的是Codesys,我的Codesys版本是V3.5 SP13 Patch 1,因此我选择相应的选项,而且在IDE path中输入Codesys的安装位置,输出文件夹也可以设置(我就用默认的了C:\Program Files\Polyspace\R2019b\bin\plcsrc)。


    20200209163203523.jpg
    然后还是在Controller模块上右键选择PLC Code—>Generate code for subsystem,成功生成代码后会跳出以下页面。

    2020020916365074.jpg
    打开输出文件夹可以看到生成的文件有三个,其中st文件和xml文件是我们感兴趣的。st文件中是PID控制程序的代码,我们可以用记事本打开看看里面的内容。除去繁琐的注释,真正的算法代码很简单,就是计算比例项、积分项、微分项,然后三项相加得到最终的控制量Control。我们还能看到程序中对微分项采取了一阶低通滤波,这样可以去除高频噪声。还可以看到整个PID控制程序是作为一个Function Block程序块的形式存在,这方便了我们在正式项目中调用它。

    20200209164720450.jpg


    2 Codesys中的操作

    xml文件可以导入到Codesys中。xml是一种标准的存储格式,各大主流PLC厂家都支持这种格式。打开Codesys的IDE编程环境,然后新建一个“Standard Project”工程。在“工程”菜单中选择导入xml文件,如下图所示。


    20200209165323210.jpg
     在POU栏中可以找到导入后的程序,从此以后你就可以在实际工程项目中调用这个PID函数块了,它的名字是默认的Controller,输入是误差量Error,类型是LREAL,输出是控制量Control。
    20200209165953723.jpg


    3 导出程序的正确性验证

      也许你会怀疑,导出的程序是否与我们在仿真中的效果一样呢?Matlab更牛逼的是还支持将自己仿真的数据与Codesys中运行的数据进行对比从而验证导出程序的正确性,操作的步骤如下。在PLC Code—>Options选项页中将Generate testbench for subsystem勾选上,如下图。


    20200209170633400.jpg

      再次导入到Codesys中后,我们会发现多了一个TestBench程序块,它里面带着仿真数据,如下图所示。注意,在TestBench的函数定义区中有这样一行代码ABS(out_Control - cycle_Control) > (1.0E-5 * ABS(cycle_Control)),显然这是在比较out_Control和cycle_Control两个值的差别,前者是Codesys中调用函数块计算得到的控制量,后者是Matlab在仿真过程中保存下来的控制量。如果二者误差小于一定阈值(程序中是0.00001<span class="MathJax" id="MathJax-Element-1-Frame" tabindex="0" data-mathml="×      \times" role="presentation" style="box-sizing: border-box; outline: 0px; display: inline; line-height: normal; font-size: 19.36px; word-spacing: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; position: relative;">×\times×扫描周期)则说明导出的程序块与仿真程序是一致的。下面第二幅图就是实际运行的结果,testVerify判断二者之差是否小于阈值,图中它为True,这说明导出的程序与仿真是一样的。由于TestBench是个程序块(FB),所以我们要先实例化,然后调用即可。


    20200209173902477.jpg

    20200209171612356.jpg




    打赏鼓励一下!
    +10
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

    本版积分规则

    
    顶部qrcode底部
    关注酷德网订阅号,获取更多资讯!

    QQ|小黑屋|手机版|Archiver|酷德论坛 ( 苏ICP备16065247号 )|网站地图

    GMT+8, 2020-11-24 22:23 , Processed in 0.223775 second(s), 65 queries .

    酷德网

    © 2001-2013 Hicodesys. 技术支持 by 酷德网

    快速回复 返回顶部 返回列表