西门子1500PLC(模拟器)与Matlab经由Modbus通信联合PID仿真
一、仿真思路
由西门子1500PLC(模拟器)提供PID,由Matlab模拟系统,系统模型采用之前
参数辨识的加热器的传递参数

双方通过ModbusTCP通信。
二、PLC工程中添加PID模块
在原有基于西门子1500仿真软件PLCSIM Advanced 7.0的本机Modbus TCP通信的PLC工程中,添加PID相关模块。
1、添加循环中断块
由于对积分微分时间的精确计算,PID函数必须在循环中断OB中调用,为此,首先在项目中点击“添加新块”,选择“组织块”和“Cyclic Interrupt”类型,设置循环时间为200ms,代表该OB块每隔200ms被调用执行一次。

2、添加PID_Compact块
在“指令”栏中选择“工艺”指令组,在“PID控制”文件夹中,选择“PID_Compact”指令,将它拖放到循环中断OB中,在弹出的“调用选项”对话框中,可以定义新生成的PID工艺对象即一个数据块的名称,点击“确定”,这样将创建一个PID工艺对象。


PID_Compact主要有三个参数,一个设定值,即被控变量温度,压力的设定值,如控制温度在40度。比如;input为被控变量的当前值,如当前温度37度。
output为输出给执行器的数值,在本例中,为加热器的功率。
在本例中,设定值、反馈值由matlab客户端传至PLC;输出值由PLC传至matlab。
3、在工艺对象栏中,选择组态模式,设置PID的一些参数,把input/ouput参数设置为input,output,这样三个变量按实型处理,其他按默认设置。

4、数据类型转换
由于PID_Compact的三个参数都是real型,但modbus通信是用word,因此需要一个转换,将两个word转为一个real。
首先将通信的数据数组改为Dword型。

其次,在梯形图中进行显示类型转换。

至此,PLC端设置告一段落。
三、Matlab端配置
在原有传递函数的Simulink工程中,添加Modbus通信交互部分。在simulink的库中,有现成的modbus通信块,而且读写块是分开的。
在本项目中,PLC为服务器端,matlab为客户端。
1、配置客户端
首先,将Modbus Client Read/Write块拖入视图中,然后查看属性,配置客户端。
新增客户端,输入IP。

2、配置读变量
在Read块中,增加读取的变量。数据类型选为单浮点,地址为5,因为前面还有两个数据,每个浮点型占两个word。

3、配置写变量
在Write块中,配置写入设定值、反馈值的变量。

4、配置数字、图形显示
添加3个数字显示器,用于分别显示设定值、反馈值、输出值。

配置图形显示,示波器

5、构建系统整体框图

四、系统整体调节
1、自动调节
先启动matlab仿真,把仿真时间设置的长一些,一边让PLC能完成自整定,然后在PLC中进行自动调节,自动调节完后,将参数上传。

调节参数过程输出曲线如下。

获得参数如下

将CPU重启一下,重新仿真,获得的效果如下

2、手动调节
在调试界面,可以手动输入PID参数,先上载再下载到PLC中。

效果如下:

效果比自动调的要好。
设置微分权重为0,效果如下,响应貌似更迅速了。

