五、 对温度控制的实现
为便于对整个老化房内温度的控制,同时充分利用EC20 PLC自身PID功能和PWM脉冲输出(Y0,Y1)的优势,室内温度区域分为2个部分(上层和下层各8个测温度点),对温度取平均值作为温度的测量值,并把此平均值送入PID功能块进行运算,同时对加热执行元件(参考EC20 PLC的I/O接线图,固态继电器SSR1,SSR2,SSR3所控制的发热管的功率逐渐加大)也进行了分组处理:温度偏差较小的情况下,进行PID运算,通过Y0输出脉冲给SSR1,同时关闭SSR2,SSR3(即Y1,Y2停止输出);如果温度偏差较大,则Y1,Y2也参加输出,具体处理思路如下:
偏差值(ER=SV-PV) |
处理办法 |
ER≥3 |
关闭PID运算,直接输出Y0,Y1,Y2; |
3>ER≥1 |
启动PID运算控制Y0输出,同时启动Y1输出;关闭Y2输出; |
1>ER≥-1 |
启动PID运算控制Y0输出,关闭Y1,Y2输出; |
-3>ER>-1 |
启动PID运算控制Y0输出,同时启动Y1输出;关闭Y2输出; |
-3≥ER |
关闭PID运算,关闭Y0,Y1,Y2; |
通过此法处理可以把温度控制精度保持在±0.3度以内,而且无论提升温度还是下降温度都很快速;同时把PID输出转化为PWM的占空比输出,又大大节省了PLC的资源(充分利用Y0,Y1的高达100KHZ的脉冲输出功能)。
EC20 PLC的编程软件CONTROLSTAR的操作简单方便,指令丰富,功能强大,是一个很优秀的全中文编辑工具。
实现步骤具体如下:首先,在数据块设定PID各参数,其中的重点是设置P,I,D三个参数和输出量的上下限范围,由于PID的输出结果直接和PWM结合在一起,所以设置时要特别注意,在本例子中,按照PWM的周期为4秒(=4000MS)计算,把PID的输出上下限分别设定为4000和0;另外按照逆动作(BIT0=1),输出限定(BIT5=1)的要求对D7911各位进行赋值;
D7910 500 //采样时间S3 采样时间(Ts)范围为1~32767(ms),比运算周期短的时间数值无法执行;
D7911 16#23 //动作方向 > 逆动作,设输出限定
………………………………………………..//BIT0 0:正动作 1:逆动作;
………………………………………………..//BIT1 0:输入变化量报警无效 1:输入变化量报警有效;
………………………………………………..//BIT2 0:输出变化量报警无效 1:输出变化量报警有效;
………………………………………………..//BIT3-4 没使用;
………………………………………………..//BIT5 0:输出值上下限设定无效1:输出值上下限设定有效;
………………………………………………..//BIT6~BIT15 没使用
D7912 70 //S3+2 输入滤波常数(α)范围0~99[﹪],为0时没有输入滤波;
D7913 100 //S3+3 比例增益(Kp)范围1~32767[﹪];
D7914 25 //S3+4 积分时间(TI)范围0~32767(×100ms),为0时作为∞处理(无积分);
D7915 0 //S3+5 微分增益(KD)范围0~100[﹪],为0时无微分增益;
D7916 63 //S3+6 微分时间(TD)范围0~32767(×10ms),为0时无微分处理;
D7925 2000 //S3+15 输入变化量(增侧)报警设定值0~32767(S3+1的BIT1=1时);
D7926 0 //S3+16 输入变化量(减侧)报警设定值0~32767(S3+1的BIT1=1时);
D7927 4000 //S3+17 输出变化量(增侧)报警设定值0~32767(S3+1的BIT2=1和BIT5=0时);输出上限设定值-32768~32767(S3+1的BIT2=0和BIT5=1时);
D7928 0 //S3+18 输出变化量(减侧)报警设定值0~32767(S3+1的BIT2=1和BIT5=0时);输出下限设定值-32768~32767(S3+1的BIT2=0和BIT5=1时);
其次,在程序里调用PID指令和PWM指令用于控制Y0的输出(对SV和PV的比较而进行的逻辑控制输出较简单,故此处省略)。

六、 对变频器的启停控制
由于EMESON EC20 PLC和EV2000变频器(非标)都集成MODBUS协议,所以实现它们的通信相对比较简单,整个网络采用RS485通信方式。
1. 各设备接口通信参数设置,对EC20 PLC设置如下:
2. EV2000的设置要点:1,各通信参数要和EC20 PLC一致;2,各变频器的地址要有自己唯一的从机地址;3,注意变频器的通信跳线开关CN14拨在RS485方向 ;

3. EC20PLC和变频器的连接如下:

4. EC20 PLC和变频器之间采用MODBUS RTU方式通信,Modbus采用“Big Endian”编码方式,先发送高位字节,然后是低位字节。RTU方式格式如下:

RTU方式:在RTU方式下,帧之间的空闲时间取功能码设定和Modbus内部约定值中的较大值。Modbus内部约定的最小帧间空闲如下:帧头和帧尾通过总线空闲时间不小于3.5个字节时间来界定帧。数据校验采用CRC-16,整个信息参与校验,校验和的高低字节需要交换后发送。具体的CRC校验请参考协议后面的示例。值得注意的是,帧间保持至少3.5个字符的总线空闲即可,帧之间的总线空闲不需要累加起始和结束空闲。
Modbus最主要的功能是读写参数,不同的功能码决定不同的操作请求。变频器Modbus协议支持以下功能码操作:
功能码 |
功能码意义 |
0x03 |
读取变频器功能码参数和运行状态参数 |
0x06 |
改写单个变频器功能码或者控制参数,掉电之后不保存 |
0x08 |
线路诊断 |
0x10 |
改写多个变频器功能码或者控制参数,掉电之后不保存 |
0x41 |
改写单个变频器功能码或者控制参数,掉电之后保存 |
0x42 |
功能码管理 |
Modbus协议不同的功能码有不同数据的格式和意义,简要介绍如下:
改写多个变频器功能码和状态参数的格式协议:请求格式如下:
应用层协议
数据单元 |
数据长度
(字节数) |
取值或范围 |
功能码 |
1 |
0x10 |
起始寄存器地址 |
2 |
0x0000~0xFFFF |
操作寄存器数目 |
2 |
0x0001~0x0004 |
寄存器内容字节数 |
1 |
2*操作寄存器数目 |
寄存器内容 |
2*操作寄存器数目 |
|
应答格式如下:
应用层协议
数据单元 |
数据长度(字节数) |
取值或范围 |
功能码 |
1 |
0x10 |
起始寄存器地址 |
2 |
0x0000~0xFFFF |
操作寄存器数目 |
2 |
0x0001~0x0004 |
读取变频器参数的协议格式:请求格式如下:
应用层协议
数据单元 |
数据长度
(字节数) |
取值或范围 |
功能码 |
1 |
0x03 |
起始寄存器地址 |
2 |
0x0000~0xFFFF |
寄存器数目 |
2 |
0x0001~0x0004 |
应答格式如下:
应用层协议
数据单元 |
数据长度
(字节数) |
取值或范围 |
功能码 |
1 |
0x03 |
读取字节数 |
1 |
2*寄存器数目 |
读取内容 |
2*寄存器数目 |
|
|