西门子 1200 伺服库卡机器人 12 工位博图程序例程 MCGS 触摸屏中文注释 1200 控制库卡机器人,PTO 控制松下伺服,36路模拟量,12 路模拟量压力检测,12 路压力输出26 个温控器 485 总线通讯。 博图 V15编程,整套项目资料 资料包括: 1、 1200 程序 2、 MCGS 触摸,3、操作手册 4、PDF 电路图5、BOM表

老司机带你拆解西门子1200自动化项目实战,这个集成了库卡机械臂、松下伺服、温控系统的方案有点意思。整个系统光模拟量就搞了36路,12工位压力检测配合12路压力输出,硬核配置直接拉满。

先看硬件架构,1200PLC作为主控大脑,通过Profinet牵着库卡机器人走。重点说下PTO控制松下伺服的骚操作,咱们用PulseTrain输出轴直接怼上伺服驱动器。关键代码长这样:
ST
//轴参数配置
Axis_1.Config.PTOOutput := %Q0.5; //脉冲输出点
Axis_1.Config.DirectionOutput := %Q0.6; //方向信号
Axis_1.Config.EnableOutput := %Q0.7; //使能输出
//点动模式程序段
IF "JogForward" THEN
Axis_1.MoveVelocity( Velocity := 500.0 );
ELSIF "JogBackward" THEN
Axis_1.MoveVelocity( Velocity := -300.0 );
END_IF;
这段代码里的PTO配置直接把物理输出点绑定到轴对象,注意方向信号和使能信号的逻辑配合。实操中发现松下A6驱动器对脉冲沿敏感,得在博图里把PTO频率精度调到0.1%才能稳定跑。

模拟量处理是另一个重头戏,12路压力检测用到了分时采集策略。在OB35循环中断里搞了个队列处理:
ST
//模拟量轮询采集
FOR #i := 0 TO 11 DO
CASE #step OF
0:
"AI_Channel" := 1;
#currentPressure := "AI1".Value;
#step := #step + 1;
1:
//...其他通道处理
END_CASE;
END_FOR;
这个轮询机制有效缓解了同时采集时的信号干扰问题。实测中发现4-20mA信号在长距离传输时容易衰减,得在硬件组态里把滤波时间设到20ms以上才稳。

ModbusRTU温控器联网是个技术活,26台温控器菊花链走485总线。分享个通讯配置要点:
ST
//Modbus主站配置
MB_MASTER_DB.CYCLE := T#500ms; //轮询周期
MB_MASTER_DB.CONNECT := TRUE; //启用连接
//温度读取函数块
MB_MASTER_DB(
REQ := "Read_Temp",
MB_ADDR := 1, //从站地址
MODE := 0, //读保持寄存器
DATA_ADDR := 30001, //起始地址
DATA_LEN := 2,
DATA_PTR := @#tempBuffer);
这里每个温控器间隔500ms轮询,实测发现波特率设成19200时通讯最稳定。遇到过地址冲突导致的数据错乱,排查时用串口监听工具抓到两个从站用了相同地址。

MCGS触摸屏的变量绑定直接关系到操作体验,重点看压力设定界面怎么做联动:
lua
--压力设定脚本
local set_pressure = GetTagValue("Pressure_Set")
if set_pressure > 10.0 then
SetTagBit("Overload_Alarm", 1)
PlaySound("alarm.wav")
else
WritePLC("DB1.DBD10", set_pressure) --写入PLC数据块
end
这段脚本实现了设定值越限报警功能,注意DB数据块的偏移地址要和PLC程序严格对应。在联调时发现浮点数传输异常,最后在MCGS的变量格式里改成IEEE754格式才解决。

项目里遇到的坑得提一嘴:伺服使能信号和急停回路的互锁逻辑最初漏了个上升沿检测,导致设备上电时偶发误动作。后来在PLC程序里加了这行才搞定:
ST
//急停连锁优化
IF NOT "EmergencyStop" THEN
"Axis_Enable" := "StartSignal" AND "Axis_Ready";
ELSE
"Axis_Enable" := FALSE;
END_IF;
这套方案最秀的地方在于把36路模拟量、12工位压力控制和26台温控器整合得严丝合缝。源码里的FB块封装了大量工艺函数,比如这个压力PID算法:
ST
//压力闭环控制
Pressure_PID(
SetPoint := "Pressure_SP",
ActualValue := "Pressure_PV",
Kp := 0.8,
Ti := T#2s,
Td := T#0.5s,
Output => "PID_Output");
参数整定阶段发现积分时间对系统响应影响最大,最后用衰减曲线法把Ti调到1.5秒才达到最佳效果。现场调试时还发现模拟量模块的接地没做好,导致压力采样值漂移,重新做了等电位连接后问题消失。
项目资料里的电路图值得细看,特别是伺服动力线和信号线的分离走线方式,有效降低了干扰。BOM表中标注的电缆型号都是实战验证过的,比如用Belden 8760做编码器信号线,比普通电缆抗干扰强不止一个档次。
这个案例给我们的启示:大型集成项目成败在细节。从博图程序的结构化编程,到触摸屏的防误操作设计,每个环节都要考虑容错机制。源码中大量的报警处理程序(光报警类别就分了18种)充分体现了工程化思维。