松下欧版FPwinPro7编程软件编写,非标组装机PLC程序一套,采用国际电工委IEC61131-3编程标准,程序模块化用PRG和FB功能块制作,全部可以自由导入导出,显著提高编程效率,降低出错的可能性。 应用PLC型号为FP-C60T-XH 6轴PLC,实际使用控制两个伺服和两个步进电机,触摸屏为昆仑通泰触摸屏。 此程序成熟稳定,注释详细,是编程爱好者和工程师研究这个品牌的经典参考程序。
拆开松下FP-C60T-XH PLC的程序包,扑面而来的不是冰冷的代码堆砌,反而有种工程师手作笔记的亲切感。这套用FPwinPro7打磨出来的程序,活脱脱就是一份日系工控设备的解剖标本。
模块化设计在这里玩得相当溜。主程序PRGMAIN里就一句粗暴的FBCore(EN:=TRUE),老司机都懂这是把核心功能打包成黑匣子了。随便点开FB_MotorCtrl功能块,伺服和步进的控制逻辑被揉成了可复用的零件:
FUNCTIONBLOCK FBMotorCtrl
VAR_INPUT
AxisNo : INT;
TargetPos : REAL;
END_VAR
VAR_OUTPUT
CurrentPos : REAL;
StatusWord : WORD;
END_VAR
//轴类型自动识别 1:伺服 2:步进
IF AxisNo <=2 THEN
MCPower(Axis:=AxisNo, Enable:=TRUE, EnablePositive:=TRUE);
MC_MoveAbsolute(Axis:=AxisNo, Position:=TargetPos);
ELSE
STEP_Home(Axis:=AxisNo); //步进轴特有回零
END_IF
这种写法妙在把伺服和步进的差异消化在功能块内部,外部调用时根本不需要关心底层硬件差异。需要加轴?直接Ctrl+C/V改个编号就能再战。
全局变量表里藏着彩蛋——所有I/O点都用结构体打包成了Device结构:
TYPE Device :
STRUCT
EmergencyStop : BOOL; //急停信号
Cylinder1_Sensor : BOOL; //气缸1到位
Conveyor_Speed : INT; //输送带速度设定
END_STRUCT
END_TYPE
比起零散的bool变量,这种面向对象的处理让跨模块调用时自带防呆属性。想找某个传感器信号?直接Device.Cylinder1_Sensor比满世界找X3.4要直观得多。
触摸屏交互部分更是典型日系风格的严谨。昆仑通泰屏上的每个操作按钮都对应着PLC里的特定功能块调用,比如这个自动运行触发逻辑:
IF HMI.StartAuto AND NOT Device.EmergencyStop THEN
FB_AutoCycle(Start:=TRUE);
HMI.StatusMessage := '自动模式运行中';
ELSIF Device.EmergencyStop THEN
FB_EstopHandler(); //急停专用处理块
END_IF
注释里甚至标注了操作面板按钮的物理编号,这种细节强迫症对后期维护太友好了。整套程序像乐高积木似的模块化程度,导出的.project文件直接能在同系列PLC上即插即用。据说原厂工程师调试时,真的就带着U盘现场导入功能块开搞,这种可移植性在产线设备改造时能省下多少瓶胃药啊。