对于初学PLC的朋友或者有一定经验的工程师,如果有一套官方权威的PLC程序框架,那么编写一个自动化设备程序相对容易很多。在实际情况下,有些初学PLC的朋友对PLC指令、存储数据和设备动作流程都明白了,可是打开电脑开始编程时,就卡壳了不知道从什么地方入手。
今天就给有上面类似情况的朋友介绍一个官方的PLC程序框架,可用来学习和参考。或许这个程序框架也是抛砖引玉,也希望资深PLC人士能提出更可行完善的程序框架设计思路和建议。
以下就是倍福官方TC2的程序框架:
POU程序目录包括主要功能模块比如系统辅助、程序辅助、模式转换、设备逻辑动作、系统信息、执行器、运动控制这些模块基本包括一个自动化设备所需要的功能
1、系统辅助系统模块里面又分出四个设备常用模块有画面HMI、文件记录、文件配方和用户管理
2、程序辅助系统分出两个设备重要功能报警和输入输出模块,这个有多重要这个就不用说了,搞过设备的人都清楚它们的重要性。
3、模式转换模块就是手自动以及复位状态之间切换保证每个模式互补干涉正常动作。
R_TRIG_Bt[1](CLK:=DATA.Hmi_btAutoRun OR stInput.IxStart);R_TRIG_Bt[2](CLK:=DATA.Hmi_btAutoStop OR stInput.biBtStop);R_TRIG_Bt[4](CLK:=DATA.Hmi_btPause OR stInput.IxHold);(*=================自动运行==============================*)IF R_TRIG_Bt[1].Q(*开始*)AND DATA.HomeDoneAND NOT DATA.GoHomeAND NOT DATA.MachineRunInCycleAND NOT DATA.AutoModeIsActiveAND NOT gbAlarm_StopAlarm THENDATA.AutoModeIsActive:=TRUE;DATA.MachineRunInCycle:=TRUE;DATA.AutoStoping:=FALSE;(*清除记忆*)DATA.GoPauseState:=FALSE;(*清除记忆*)END_IF(*=================立即暂停==============================*)IF R_TRIG_Bt[4].Q(*暂停按钮*)AND NOT DATA.AutoStopingAND DATA.MachineRunInCycle THENDATA.GoPauseState:= NOT DATA.GoPauseState;(*暂停记忆*)END_IF(*=================停机==============================*)IF R_TRIG_Bt[2].Q(*停机按钮*)AND NOT DATA.AutoStopingAND DATA.MachineRunInCycle THENDATA.AutoStoping:=TRUE;END_IFIF DATA.AutoStoping(*自动停止中*)AND (TON_ForceStop.Q(*强制退出*)(*-------------------------------根据自己的设备修改条件:停机完成的状态---------------------------------*)(*OR (APP.Mag1.AutoStep=0AND APP.Mag1.AutoStep=0AND (APP.Belt.AutoStep=0 OR APP.Belt.AutoStep=50)AND stRB_Data[1].RBtoPLC_RbInWaitStopPosAND NOT stRB_Data[1].bOut_Suck[1]AND NOT stRB_Data[1].bOut_Suck[2])*)(*-----------------------------------------------------------------------------------------------------*)) THENDATA.AutoStoping:=FALSE;DATA.AutoModeIsActive:=FALSE;DATA.MachineRunInCycle:=FALSE;DATA.GoPauseState:=FALSE;(*暂停记忆*)END_IF 4、设备逻辑动作主要是设备自动运行逻辑程序
5、系统信息模块是PLC系统本身的状态包括CPU运行状态还有总线网络运行情况还有与CPU数据交换的I/O模块的运行状态的一些监控程序。
6、执行器模块包含一些普通电机、气缸、报警灯控制动作,现把这动作封装在FB里面,可以实例化重复使用。
7、运动控制模块控制伺服轴动作有JOG动作、回零、速度模式运行、绝对定位、相对定位等一些控制功能块FB
FUNCTION_BLOCK Axis_PTP_CoEVAR_INPUTExecute:BOOL;bReset:BOOL;Ref:AXIS_REF;IO:Axis_IO;mcJog:MC_Jog;mcHome:FB_Home_ByLimit;mcMoveAbsolute:MC_MoveAbsolute;mcMoveRelative:MC_MoveRelative;mcMoveVelocity:MC_MoveVelocity;mcSoEReset:FB_SoEReset;mcPower:MC_Power;mcReset:MC_Reset;mcStop:MC_Stop;Target:LREAL;Velo: LREAL;Jerk:LREAL := 0.0;Acc:LREAL := 0.0;Dec:LREAL := 0.0;END_VARVARDone:BOOL;(*功能块执行完成状态*)Busy: BOOL;(*功能块正在执行状态*)Active:BOOL;CommandAborted:BOOL;Error:BOOL;ErrorID:UDINT;END_VAR 为了技术交流和相互学习,建云工控组建了技术交流学习群,以后我们可以在群里探讨PLC、伺服、变频器、工业网络、机器人、编程技巧等工控先进技术问题,一起学习一起加油
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!