目录
一、 设备介绍
1.1、整体概述
本加热炉专为烘干胶类材料设计,基于倍福自动化控制技术,通过 TC2 编程的控制模块与采用 TC3 编程的主控制 PLC,借助网桥实现高效通讯,构建起智能化、精准化的烘干系统。该加热炉能够满足不同胶类材料在烘干过程中对温度、时间、风速等参数的严格要求,广泛应用于橡胶制品加工、胶水生产等工业领域,确保胶类材料在烘干后达到理想的物理和化学性能。
1.2、结构设计
(一)炉体结构
加热炉主体采用多层隔热设计,外层为高强度耐高温不锈钢材质,具备良好的抗腐蚀性和机械强度,能够适应恶劣的工业生产环境。中层填充高效隔热材料,有效减少热量散失,降低能源消耗;内层为耐高温陶瓷板,具有高导热性和稳定性,能够均匀传递热量,避免局部过热或过冷现象,保证胶类材料烘干的均匀性。
炉体内部设有多层可调节的烘干托盘或传送带,根据胶类材料的形状、尺寸和生产工艺要求,灵活调整托盘间距或传送带速度,实现不同规格胶类材料的批量烘干。同时,托盘和传送带表面经过特殊处理,防止胶类材料粘连,便于物料的装卸和清理。
(二)加热系统
加热系统是加热炉的核心部分,采用多组高性能加热元件,如电阻加热丝、红外加热管或电磁感应加热装置。这些加热元件均匀分布在炉体内部,通过合理的布局和功率配置,确保炉内温度场的均匀性。加热元件由 TC2 编程的控制模块进行精确控制,能够根据预设的烘干工艺曲线,实时调节加热功率,快速响应温度变化,保证烘干过程的稳定性和可靠性。
(三)通风系统
为了加速胶类材料中水分和挥发物的排出,提高烘干效率,加热炉配备了高效的通风系统。通风系统包括多台耐高温风机和合理设计的风道,风机能够提供稳定的风量和风速,通过风道将热风均匀地吹送到炉体内部各个角落,促进空气循环,使胶类材料表面的水分迅速蒸发并排出炉外。同时,通风系统还可以根据烘干工艺要求,调节进风口和出风口的风量比例,控制炉内的湿度和气流方向,满足不同胶类材料的烘干需求。
1.3、控制原理
(一)TC2 编程控制模块
TC2 编程控制模块主要负责加热炉底层设备的实时控制和数据采集。通过与加热元件、温度传感器、湿度传感器、风速传感器等现场设备的连接,实时获取炉内的温度、湿度、风速等关键参数,并将这些数据传输给主控制 PLC。同时,根据主控制 PLC 下达的控制指令,精确调节加热元件的功率、风机的转速等执行机构,实现对加热炉运行状态的实时控制。TC2 编程采用倍福的 TwinCAT 2 软件平台,支持多种编程语言,如结构化文本(ST)、梯形图(LD)等,方便工程师根据具体需求进行编程和调试。
(二)TC3 编程主控制 PLC
主控制 PLC 采用 TC3 编程,基于倍福的 TwinCAT 3 软件平台,具有强大的运算能力和逻辑处理功能。它作为整个加热炉控制系统的核心,负责接收和处理来自 TC2 编程控制模块的数据信息,根据预设的烘干工艺参数和控制策略,进行逻辑运算和决策分析。然后,通过网桥与 TC2 编程控制模块进行高速通讯,下达精确的控制指令,协调各个设备的运行,确保加热炉按照预定的工艺曲线稳定运行。此外,主控制 PLC 还可以与工厂的上位机管理系统进行通讯,实现远程监控、数据存储、生产报表生成等功能,方便管理人员实时掌握加热炉的运行状态和生产数据。
(三)网桥通讯
网桥作为 TC2 编程控制模块与主控制 PLC 之间的通讯桥梁,实现了不同编程环境和网络协议之间的数据转换和传输。它采用高速、可靠的通讯技术,如以太网通讯,能够快速、准确地传输大量数据,确保控制指令和数据信息的实时交互。通过网桥通讯,TC2 编程控制模块和主控制 PLC 之间可以实现无缝协作,共同完成对加热炉的精确控制和优化运行,提高整个系统的稳定性和可靠性。
1.4、功能特点
(一)精准温度控制
借助 TC2 和 TC3 编程的高精度控制算法,加热炉能够实现对炉内温度的精确控制,温度控制精度可达 ±1℃。无论是升温阶段、恒温阶段还是降温阶段,都能严格按照预设的工艺曲线运行,确保胶类材料在最佳温度条件下烘干,避免因温度过高或过低导致胶类材料性能下降。
(二)灵活工艺调整
用户可以根据不同胶类材料的特性和烘干工艺要求,通过主控制 PLC 的操作界面,方便地设置和调整烘干温度、时间、风速、湿度等参数。同时,系统还支持多组工艺配方的存储和调用,用户只需选择相应的工艺配方,加热炉即可自动按照预设参数运行,大大提高了生产效率和灵活性。
(三)安全保护功能
加热炉配备了完善的安全保护装置,如超温报警、断偶保护、过流保护、漏电保护等。当炉内温度超过设定上限、温度传感器故障、电路电流异常或发生漏电现象时,系统会立即发出报警信号,并自动采取相应的保护措施,如切断加热电源、停止风机运行等,确保设备和人员的安全。
(四)远程监控与管理
通过与工厂上位机管理系统的通讯,操作人员可以在远程监控中心实时查看加热炉的运行状态、工艺参数和生产数据。同时,还可以对加热炉进行远程控制和参数调整,实现远程故障诊断和维护,提高设备的管理效率和智能化水平。
二、PLC通讯接配置
1、全局交互变量设计
2、输入变量实例化
3、输出变量实例化
4、变量与网桥配置模块 EL6692关联
三、设备通讯接口数据类型定义
1、input结构体类型
stNMT_HeatingIF.In.i_bReqLoad := ist_HWIn[1].0;
stNMT_HeatingIF.In.i_bReqUnload := ist_HWIn[1].1;
stNMT_HeatingIF.In.i_bEmptyed := ist_HWIn[1].2;
stNMT_HeatingIF.In.i_bRes_by1b3 := ist_HWIn[1].3;
stNMT_HeatingIF.In.i_bRes_by1b4 := ist_HWIn[1].4;
stNMT_HeatingIF.In.i_bRes_by1b5 := ist_HWIn[1].5;
stNMT_HeatingIF.In.i_bRes_by1b6 := ist_HWIn[1].6;
stNMT_HeatingIF.In.i_bRes_by1b7 := ist_HWIn[1].7;
stNMT_HeatingIF.In.i_bHeatbeat := ist_HWIn[2].0;
stNMT_HeatingIF.In.i_bError := ist_HWIn[2].1;
stNMT_HeatingIF.In.i_bTemperatureOK := ist_HWIn[2].2;
stNMT_HeatingIF.In.i_bAutoRunning := ist_HWIn[1].3;
stNMT_HeatingIF.In.i_bRes_by2b4 := ist_HWIn[2].4;
stNMT_HeatingIF.In.i_bRes_by2b5 := ist_HWIn[2].5;
stNMT_HeatingIF.In.i_bRes_by2b6 := ist_HWIn[2].6;
stNMT_HeatingIF.In.i_bRes_by2b7 := ist_HWIn[2].7;
stNMT_HeatingIF.In.i_byPartType_Current := ist_HWIn[3];
stNMT_HeatingIF.In.i_byRes_byte4 := ist_HWIn[4];
stNMT_HeatingIF.In.i_byRes_byte5 := ist_HWIn[5];
stNMT_HeatingIF.In.i_byRes_byte6 := ist_HWIn[6];
stNMT_HeatingIF.In.i_byRes_byte7 := ist_HWIn[7];
stNMT_HeatingIF.In.i_byRes_byte8 := ist_HWIn[8];
stNMT_HeatingIF.In.i_byRes_byte9 := ist_HWIn[9];
stNMT_HeatingIF.In.i_byRes_byte10 := ist_HWIn[10];
stNMT_HeatingIF.In.i_byZone1_LT := ist_HWIn[11];
stNMT_HeatingIF.In.i_byZone1_HT := ist_HWIn[12];
stNMT_HeatingIF.In.i_byZone2_LT := ist_HWIn[13];
stNMT_HeatingIF.In.i_byZone2_HT := ist_HWIn[14];
stNMT_HeatingIF.In.i_byZone3_LT := ist_HWIn[15];
stNMT_HeatingIF.In.i_byZone3_HT := ist_HWIn[16];
stNMT_HeatingIF.In.i_byExit_LT := ist_HWIn[17];
stNMT_HeatingIF.In.i_byExit_HT := ist_HWIn[18];
stNMT_HeatingIF.In.i_byRes_byte19 := ist_HWIn[19];
stNMT_HeatingIF.In.i_byRes_byte20 := ist_HWIn[20];
stNMT_HeatingIF.In.i_rZone1_T :=WORD_TO_REAL( MEM.PackBytesToWord(byHighByte:=ist_HWIn[12] , byLowByte:=ist_HWIn[11] )) /10.0;
stNMT_HeatingIF.In.i_rZone2_T :=WORD_TO_REAL( MEM.PackBytesToWord(byHighByte:=ist_HWIn[14] , byLowByte:=ist_HWIn[13] )) /10.0;
stNMT_HeatingIF.In.i_rZone3_T :=WORD_TO_REAL( MEM.PackBytesToWord(byHighByte:=ist_HWIn[16] , byLowByte:=ist_HWIn[15] )) /10.0;
stNMT_HeatingIF.In.i_rExit_T :=WORD_TO_REAL( MEM.PackBytesToWord(byHighByte:=ist_HWIn[18] , byLowByte:=ist_HWIn[17] )) /10.0;
2、output 结构体类型
ost_HWOut[1].0 := stNMT_HeatingIF.Out.q_bLoad_Done;
ost_HWOut[1].1 := stNMT_HeatingIF.Out.q_bUnload_Done;
ost_HWOut[1].2 := stNMT_HeatingIF.Out.q_bToolingSafety;
ost_HWOut[1].3 := stNMT_HeatingIF.Out.q_bLoading;
ost_HWOut[1].4 := stNMT_HeatingIF.Out.q_bReq_Empty;
ost_HWOut[1].5 := FALSE;
ost_HWOut[1].6 := FALSE;
ost_HWOut[1].7 := FALSE;
ost_HWOut[2].0 := stNMT_HeatingIF.Out.q_bHeatbeat;
ost_HWOut[2].1 := stNMT_HeatingIF.Out.q_bError;
ost_HWOut[2].2 := FALSE;
ost_HWOut[2].3 := FALSE;
ost_HWOut[2].4 := FALSE;
ost_HWOut[2].5 := FALSE;
ost_HWOut[2].6 := FALSE;
ost_HWOut[2].7 := FALSE;
ost_HWOut[3] := stNMT_HeatingIF.Out.q_byCurrent_PartType;
ost_HWOut[4] := 0;
ost_HWOut[5] := 0;
ost_HWOut[6] := 0;
ost_HWOut[7] := 0;
ost_HWOut[8] := 0;
ost_HWOut[8] := 0;
ost_HWOut[9] := 0;
ost_HWOut[10] := 0;
ost_HWOut[11] := 0;
ost_HWOut[12] := 0;
ost_HWOut[13] := 0;
ost_HWOut[14] := 0;
ost_HWOut[15] := 0;
ost_HWOut[16] := 0;
ost_HWOut[17] := 0;
ost_HWOut[18] := 0;
ost_HWOut[19] := 0;
ost_HWOut[20] := 0;
四、通讯功能块变量声明
VAR CONSTANT
END_VAR
(*---------------------------------------------*)
(*Local variables*)
(*---------------------------------------------*)
VAR
Heartbeat_Timeout : TON;
AAA:BYTE;
END_VAR
(*---------------------------------------------*)
(*Local temp variables*)
(*---------------------------------------------*)
VAR
stTemp_CELL : ST_SYS_CELL; (* Cell structure for element*)
stTemp_ELEMENT : ST_SYS_ELEMENTS; (* Data structure of element *)
tTemp_T_Ticker :TIME;(* actual CPU-Tick *)
bVar_REQ_HP :BOOL; (*Request Stop Roller *)
bVar_REQ_WP_1 : BOOL; // Request Reverse Roller
bVar_REQ_WP : BOOL; // Request Start Roller
wTemp_Diagnose : WORD;(*Error Messages
BIT.0 Robot: Collective Error
BIT.1 Robot: Task number invalid
BIT.2 Robot: Missing release for task start
BIT.3 Robot: Emergengy Stop from robot
BIT.4 Robot: Error - Bus State
BIT.5 Robot: Error - Program not started
BIT.6 Robot: Error - Stop by program
BIT.7 Robot: Error - Stopped by user
BIT.8 Robot: Reserve
BIT.9 Robot: Teach Mode active
BIT.10 Robot: res
BIT.11 Robot: res
BIT.12 Robot: No Connection to Robot TCP_IP-Server
BIT.13 Robot: No answer from robot for Read error
BIT.14 Robot: User Error by Robot
BIT.15 Robot: Reserve
*)
END_VAR
五、通讯功能块程序
1、通讯功能块程序调用
2、通讯功能块代码
stNMT_HeatingIF.Out.q_bHeatbeat := bGV_Pulse_1Hz;
(* Initialisation of FB internal structures - for reducing length of expressions *)
acstartCopyData();(*============================================================================================================================*)
ac_Mapping_Input();
(* --- INIT of element feedback --------------------------------------------------- *)
stTemp_ELEMENT.stFeedBack.stSTATE.bIN_WP := FALSE;
stTemp_ELEMENT.stFeedBack.stSTATE.bIN_WP_1 := FALSE;
stTemp_ELEMENT.stFeedBack.stSTATE.bIN_HP := FALSE;
stTemp_ELEMENT.stFeedBack.stSTATE.bOUT_HP := FALSE;
stTemp_ELEMENT.stFeedBack.stSTATE.bOUT_WP := FALSE;
stTemp_ELEMENT.stFeedBack.stSTATE.bTO_WP := FALSE;
(* Request HP: stop Hearting *)
bVar_REQ_HP := (stTemp_CELL.stMODE.bMANUAL AND stTemp_ELEMENT.stCMD.bMAN_HP )
OR
((stTemp_CELL.stMODE.bINIT_RUNNING OR stTemp_CELL.stMODE.bAUTO_RUNNING) AND stTemp_ELEMENT.stCMD.bAUTO_HP);
(* Request WP: start Hearting *)
bVar_REQ_WP := ((stTemp_CELL.stMODE.bMANUAL AND stTemp_ELEMENT.stCMD.bMAN_WP)
OR
((stTemp_CELL.stMODE.bINIT_RUNNING OR stTemp_CELL.stMODE.bAUTO_RUNNING) AND stTemp_ELEMENT.stCMD.bAUTO_WP))AND NOT bVar_REQ_WP_1;
(* Reset Edit mode if user forgot it *)
IF stTemp_CELL.stMODE.bAUTO
OR stTemp_CELL.stMODE.bAUTO_RUNNING
OR stTemp_CELL.stMODE.bINITIAL
OR stTemp_CELL.stMODE.bINIT_RUNNING THEN
stTemp_ELEMENT.stCMD.bEditMode := FALSE;
END_IF;
(* ================================================================================ *)
(* --- Reset of element commands -------------------------------------------------- *)
stTemp_ELEMENT.stCMD.bMAN_HP := FALSE;
stTemp_ELEMENT.stCMD.bMAN_WP := FALSE;
stTemp_ELEMENT.stCMD.bMAN_WP_1 := FALSE;
stTemp_ELEMENT.stCMD.bAUTO_WP := FALSE;
stTemp_ELEMENT.stCMD.bAUTO_WP_1 := FALSE;
stTemp_ELEMENT.stCMD.bAUTO_HP := FALSE;
(* ================================================================================ *)
stNMT_HeatingIF.Out.q_bToolingSafety:=NOT ((stGV_SYS_ELEMENTS.arstELEMENT[E_ElementList_Cell2.V016_Heating_Fumacer_Unload_Slide_ST7].stFeedBack.stSTATE.bIN_HP
AND (NOT stGV_SYS_ELEMENTS.arstELEMENT[E_ElementList_Cell2.V017_Heating_Fumacer_Unload_Lifter_ST7].stFeedBack.stSTATE.bIN_HP OR NOT stGV_SYS_ELEMENTS.arstELEMENT[E_ElementList_Cell2.V018_Heating_Fumacer_Unload_Rotary_ST7].stFeedBack.stSTATE.bIN_hP ))
OR (stGV_SYS_ELEMENTS.arstELEMENT[E_ElementList_Cell2.V012_Heating_Fumacer_Load_Slide_ST6].stFeedBack.stSTATE.bIN_WP AND stGV_SYS_ELEMENTS.arstELEMENT[E_ElementList_Cell2.V013_Heating_Fumacer_Load_Lifter_ST6].stFeedBack.stSTATE.bIN_WP)
(*OR ( NOT stGV_SYS_ELEMENTS.arstELEMENT[E_ElementList_Cell2.V016_Heating_Fumacer_Unload_Slide_ST7].stFeedBack.stSTATE.bIN_HP AND GVL_Valve.OutByte4.V016_OutHeating_Fumace_PnPSlideCyl_Home )*) );
stNMT_HeatingIF.Out.q_bError:=FALSE;
(* === Diagnostic and monitoring ================================================== *)
IF stTemp_CELL.stMODE.bQUITT_ERRORS AND wTemp_Diagnose <> 0 (*OR stTemp_ELEMENT.stCMD.bSIMULATE*) THEN
wTemp_Diagnose := 0; (* Reset Error-word *)
stTemp_ELEMENT.stFeedBack.stSTATE.bERR_HP := FALSE;
stTemp_ELEMENT.stFeedBack.stSTATE.bERR_WP := FALSE;
stTemp_ELEMENT.stFeedBack.stSTATE.bERR_WP_1 := FALSE;
END_IF
// Hearting Request Load/Unload Constant 1,Wait Machine Load/Unload Done,Reset Request,PLC Wait Not Request Then Reset Load/Unload Done
(* === Execute Function ================================================== *)
(* States *)
stTemp_ELEMENT.stFeedBack.stSTATE.bERR := wTemp_Diagnose <>0;
stTemp_ELEMENT.stFeedBack.stSTATE.bIN_HP := NOT stTemp_ELEMENT.stFeedBack.stSTATE.bIN_WP
AND NOT stTemp_ELEMENT.stFeedBack.stSTATE.bIN_WP_1
AND NOT stTemp_ELEMENT.stFeedBack.stSTATE.bERR;
// Alarm Bits
wTemp_Diagnose.0 := stNMT_HeatingIF.In.i_bError; //Heating Error
Heartbeat_Timeout(IN:= NOT stNMT_HeatingIF.In.i_bHeatbeat AND NOT stTemp_CELL.stMODE.bQUITT_ERRORS, PT:=T#5S);
IF Heartbeat_Timeout.Q THEN
wTemp_Diagnose.15 := TRUE; // Commumication Failure
END_IF
(*============================================================================================================================*)
(* ...finally write back FB internal structures *)
ac_Mapping_Output();
acFinalCopyData();
六、通讯功能块程序分析
这个功能块是加热炉控制系统的核心逻辑,主要负责加热炉的状态管理、命令处理、安全监控和故障诊断。下面是对代码的详细解释:
6.1、代码功能概述
这段代码是用结构化文本(ST)语言编写的,主要实现了加热炉的控制逻辑,包括:
- 状态监控与心跳信号
- 加热请求处理(高功率 HP / 低功率 WP)
- 模式管理(手动 / 自动 / 初始化)
- 安全联锁与错误处理
- 设备状态反馈与诊断
6.2、核心功能模块解析
1. 心跳信号与初始化
stNMT_HeatingIF.Out.q_bHeatbeat := bGV_Pulse_1Hz;
acstartCopyData();
ac_Mapping_Input();
q_bHeatbeat
:向网络发送 1Hz 的心跳信号,用于检测通信状态acstartCopyData()
:初始化数据结构ac_Mapping_Input()
:映射输入信号(如传感器数据)
2. 加热请求处理
// 高功率加热请求(停止加热)
bVar_REQ_HP := (stTemp_CELL.stMODE.bMANUAL AND stTemp_ELEMENT.stCMD.bMAN_HP )
OR
((stTemp_CELL.stMODE.bINIT_RUNNING OR stTemp_CELL.stMODE.bAUTO_RUNNING) AND stTemp_ELEMENT.stCMD.bAUTO_HP);
// 低功率加热请求(启动加热)
bVar_REQ_WP := ((stTemp_CELL.stMODE.bMANUAL AND stTemp_ELEMENT.stCMD.bMAN_WP)
OR
((stTemp_CELL.stMODE.bINIT_RUNNING OR stTemp_CELL.stMODE.bAUTO_RUNNING) AND stTemp_ELEMENT.stCMD.bAUTO_WP)) AND NOT bVar_REQ_WP_1;
- HP(High Power):通常用于高温烘干或停止加热过程
- WP(Working Power):正常工作功率,用于持续加热
- 请求可由手动模式(
bMAN_HP
/bMAN_WP
)或自动模式(bAUTO_HP
/bAUTO_WP
)触发
3. 模式管理与命令重置
// 自动模式下强制退出编辑模式
IF stTemp_CELL.stMODE.bAUTO OR ... THEN
stTemp_ELEMENT.stCMD.bEditMode := FALSE;
END_IF;
// 重置所有命令位,防止重复触发
stTemp_ELEMENT.stCMD.bMAN_HP := FALSE;
...
- 当系统切换到自动模式时,强制退出编辑模式
- 每个周期结束时重置命令位,确保命令只执行一次
4. 安全联锁机制
stNMT_HeatingIF.Out.q_bToolingSafety := NOT ((...复杂逻辑表达式...));
这是一个关键的安全逻辑,通过检测多个设备状态(如:
- 加热炉卸料滑块(Slide)是否在位
- 升降器(Lifter)是否在位
- 旋转台(Rotary)是否在位
)来确保设备安全运行。任何异常状态组合都会触发安全联锁,停止加热过程。
5. 故障诊断与监控
// 通信超时检测
Heartbeat_Timeout(IN:= NOT stNMT_HeatingIF.In.i_bHeatbeat AND NOT stTemp_CELL.stMODE.bQUITT_ERRORS, PT:=T#5S);
IF Heartbeat_Timeout.Q THEN
wTemp_Diagnose.15 := TRUE; // 通信故障
END_IF
- 通过心跳信号检测通信状态
- 使用定时器(
Heartbeat_Timeout
)监控通信连接,超过 5 秒无响应则判定为通信故障
6.3 、状态管理与反馈
// 设备状态计算
stTemp_ELEMENT.stFeedBack.stSTATE.bIN_HP := NOT stTemp_ELEMENT.stFeedBack.stSTATE.bIN_WP
AND NOT stTemp_ELEMENT.stFeedBack.stSTATE.bIN_WP_1
AND NOT stTemp_ELEMENT.stFeedBack.stSTATE.bERR;
// 错误字赋值
wTemp_Diagnose.0 := stNMT_HeatingIF.In.i_bError; // 加热错误
- 通过逻辑组合计算设备当前状态
- 使用错误字(
wTemp_Diagnose
)存储各种故障信息,便于上位机监控
6.4 、代码执行流程
- 初始化:复制数据、映射输入
- 状态检测:计算加热请求、模式管理
- 安全检查:执行安全联锁逻辑
- 故障诊断:检测通信故障和其他错误
- 输出更新:映射输出信号、复制最终数据
6.5 、应用场景与优化建议
- 应用场景:适用于需要精确温度控制的胶类烘干工艺,如橡胶制品硫化、胶水固化等
- 优化建议:
- 增加温度 PID 控制算法,提高温度稳定性
- 实现加热曲线的配方管理,支持更多工艺需求
- 增强故障诊断功能,记录详细的故障日志
- 优化安全联锁逻辑,增加紧急停止按钮的直接输入
这个功能块充分体现了工业自动化控制系统的核心要素:实时监控、精确控制、安全保障和故障诊断,是加热炉自动化控制的典型实现。