简介:面向自动化工程师与可编程控制器学习者的西门子1200系列三轴数控程序包,聚焦XYZ轴运动控制、单轴步进实验及系统组态,适合需要理解PLC程序架构、运动控制逻辑与工程配置的读者。包内共32个文件,约26.5MB,主要包含XML配置文件、ZIP备份压缩包、AP13组态项目文件、PLF/IDX索引文件及BMP位图等,目录结构可反映典型自动化组态工程的项目组织方式。压缩包内含三轴数控主程序、单轴步进实验备份、中间生成文件及相关调试记录,有助于对照学习硬件组态、运动指令调用、参数设置与常见文件组织方式。已有818人学习/下载,适合在掌握PLC基础后进阶研究数控程序设计与调试思路。
1. 整体架构与项目思路拆解
手头这套1200PLC三轴数控程序,是给一台小型XYZ点胶/钻孔/铣削类设备做的控制程序。核心控制器是西门子S7-1200,带动三个轴做定位运动,同时通过S7通讯协议带了几台Smart200 PLC作为下位分站设备,还通过485口接了一个RFID读写器用来识别工件信息。整套程序打包成.rar工程文件后,现场调试完直接归档,后续同类设备复制改参数就能用。
先说清楚这套东西能解决什么问题。三轴数控设备的控制逻辑并不复杂,核心就是定位准确、回零可靠、节拍可控。很多非标设备厂家早期用步进电机配独立运动控制器,编程语言是各家私有的指令表,换一个品牌就得重新学一遍。改用1200PLC之后,程序逻辑统一在TIA Portal里完成,运动控制、逻辑控制、现场总线通讯都在同一个工程里,维护成本和二次开发门槛都明显降下来。
1.1 为什么选1200PLC做三轴运动控制
选型的时候也对比过200Smart和运动控制卡。200Smart虽然是西门子家族里性价比很高的产品,但它的高速脉冲输出通道只有两个,做三轴联动需要另外扩展模块,而且200Smart不支持真正的轴对象,没有轴工艺对象之后,回零、限位、软限位、动态加减速这些参数都得自己在程序里写逻辑,工作量不小。运动控制卡倒是灵活,但需要上位机配合,非标设备现场如果脱离电脑运行,还是PLC更省心。
1200PLC的CPU本体上自带四路高速脉冲输出,带步进驱动器或者脉冲型伺服驱动器完全够用。最关键的是TIA Portal里集成了轴工艺对象,配置好之后,MC_MoveAbsolute、MC_MoveRelative、MC_Home这些运动控制指令直接用,轴与轴之间的插补需要额外做,但大多数三轴设备做的是点到点定位,并不需要真正的联动插补,1200的级联方式足够。
1.2 三轴系统硬件组成与通讯选型
这套项目的硬件配置供参考:
| 部件 | 型号/规格 | 作用 |
|---|---|---|
| CPU | S7-1200 1214C DC/DC/DC | 主控制器,四路高速脉冲输出 |
| 步进驱动器 | 57步进配2.4N·m电机(3套) | X/Y/Z轴驱动 |
| 丝杆模组 | 行程300/300/100mm | 执行机构 |
| 原点开关 | 光电传感器NPN(3个) | 回零信号 |
| 限位开关 | 光电传感器NPN(6个) | 正负限位保护 |
| 触摸屏 | 威纶通TK6071IP | 人机交互,通过S7协议连接 |
| 从站PLC | Smart200 SR20(3台) | 分别控制气缸/夹具/输送线 |
| RFID读写器 | 485接口,Modbus RTU协议 | 读取工件标签,选择加工参数 |
| 交换机 | 工业PoE交换机(8口) | 以太网组网,同时给远端的RFID设备供电 |
通讯架构是这样的:触摸屏通过以太网直连1200PLC,1200PLC作为主站,通过S7通讯协议(PUT/GET)同时与三台Smart200交换数据。RFID读写器走485串口,挂在1200的CM1241 RS485通讯模块上。整套网络里的一台工业PoE交换机既承担以太网数据交换,又通过PoE供电方式给安装在远处的RFID读写器供电,省去单独拉24V电源线的麻烦。
这么设计的原因有三点。第一,S7协议在西门子设备之间的通讯效率比Modbus TCP高,数据量不大时PUT/GET非常稳定,而且不需要在从站里写额外的通讯程序,只需要在1200侧配置连接参数。第二,3台Smart200各自处理周边的气动元件和输送线逻辑,和主站之间只需要交换启动、停止、到位、故障这几个布尔量和少量整数数据,用S7通讯足够。第三,RFID走485串口,完全不影响PLC的以太网通讯负载,实时性有保障。
2. 程序核心模块与实际参数解析
这套程序打开后,第一眼能看到的是OB1里几段相互独立的程序块。PLC程序组织上我习惯把运动控制、逻辑控制、通讯处理严格分开,这样以后换设备或者改工艺时只动对应段,不用全部推翻重来。
2.1 轴工艺对象组态与运动控制指令
在TIA Portal里组态轴,有几个参数必须认真核对。脉冲当量是指一个脉冲对应的工作台位移量,这套设备丝杆导程10mm,驱动器细分设置为1600脉冲/圈,那么脉冲当量是10/1600=0.00625mm/脉冲。这个计算值直接填进轴的“每转脉冲数”和“每转距离”里,如果填错,定位距离就会有成倍偏差,这类问题在调试现场最常见。
回零方向按实际机械结构设定,正负软限位一定要留出安全余量,比如机械行程300mm,软限位设成±280mm,避免撞到硬限位。加减速时间也影响定位精度,我习惯把启动频率设低一些,加速时间根据负载惯量调整。实际调试时发现,步进电机在速度突变时容易丢步,给一个斜坡过渡能大幅减少丢步概率。
运动控制指令用西门子的标准MC指令,主要的几个:
- MC_Power:使能轴,报错后重新使能
- MC_Home:主动回零,碰到原点开关后停止
- MC_MoveAbsolute:绝对定位到指定坐标
- MC_MoveRelative:相对定位,移动指定距离
- MC_Halt:暂停当前运动
- MC_Reset:复位轴错误
每个轴建一个背景DB,程序里通过状态机逻辑判断当前该执行哪个轴的运动。三轴之间不是同步联动,是顺序动作,所以不需要考虑插补问题。比如点胶设备,X轴先运动到目标点,Y轴再运动,Z轴下降执行点胶,过程中用“轴忙”信号做互锁,哪个轴运动没完成就不启动下一个轴。
2.2 点位表与工件参数数据结构
三轴数控程序的核心数据是点位表和加工参数。程序里先建了一个UDT(用户自定义数据类型),字段包括坐标值、移动速度、延时时间、辅助输出位。这样每加工一个工件,只需要在触摸屏上填一组点位参数,PLC内部通过数据块存储。
以点胶设备为例,加工流程是:
- 操作员装工件,按下启动按钮
- RFID读到当前工件标签号
- PLC根据标签号从配方数据块里调取对应点胶轨迹参数
- X/Y轴依次定位到轨迹坐标
- Z轴下降到位后开启出胶阀,按设定速度走完轨迹
- Z轴抬起,X/Y回原点,发出完成信号
用配方功能的好处是换机型时只需要在HMI上新增一组配方记录,不用改PLC程序。调试时可以通过配方表快速切换不同规格工件的参数,生产效率提升非常明显。
2.3 S7通讯连接配置与数据区映射
1200PLC和3台Smart200之间用S7通讯组网。在TIA Portal里添加S7连接,Partner选定为Smart200的IP地址,本地侧选定通讯类型为PUT/GET。关键操作是勾选“允许来自远程对象的PUT/GET通信访问”,否则数据交换不成功。
数据映射方面需要注意地址偏差。Smart200的V存储区(比如VB0)对应的是DB1.DBX0.0,这是很多人第一次配置时容易搞混的地方。1200PLC组态通讯DB时,把要发送的数据定义在DB块中,从站侧对应读取。
以太网通讯的扫描周期影响整个PLC的实时性。实测下来,如果每个扫描周期都执行PUT/GET,CPU负载会明显上升。我把S7通讯功能块放到OB32(循环中断组织块)里,设定为50ms触发一次,既保证通讯实时性,又不影响运动控制的扫描周期。通讯数据量不大,50ms刷新一次足够现场使用。
2.4 485接口读取RFID的协议细节
RFID读写器是不少人会卡住的地方。1200PLC要接485设备,需要用CM1241 RS422/485通讯模块。这种模块把PLC的以太网数据和串行通讯分开,互不干扰。
RFID读写器支持Modbus RTU协议,所以PLC侧调用MB_COMM_LOAD配置串口参数,然后通过MB_MASTER指令读写数据。
配置参数参照设备手册:
| 参数 | 设定值 |
|---|---|
| 波特率 | 9600 |
| 数据位 | 8 |
| 停止位 | 1 |
| 校验 | 无 |
| 从站地址 | 1 |
| 功能码 | 03(读保持寄存器) |
需要注意,RFID读写器从485上读到的数据是ASCII还是十六进制,必须和标签实际存储内容一致。程序里先读回数据到缓冲区,再做字节序交换和数据类型转换。初次调试时遇到过读到的数据高低字节错位的情况,后来在程序中加了字节交换指令解决。
3. 实操过程与关键连接细节
这部分内容偏现场,我会按实际接线和调试的顺序来说。每一步都有对应的检查要点,照着走一遍基本上能把设备跑起来。
3.1 PoE供电交换机与1200PLC的组网连接
项目里用工业PoE交换机有一些实际考量。这套设备的RFID读写器安装位置比较远,如果单独拉24V电源线,要额外走一路电源到现场,线缆成本和故障点都会增加。PoE交换机通过网线同时传数据和供电,一个口输出48V直流,配合一个PoE分离器转成24V给RFID读写器供电,现场走线干净很多。
具体接线时,PoE交换机分成三层:核心交换层连接1200PLC、触摸屏和三个Smart200从站,这三个设备本身用24V供电,不需要PoE。远端RFID读写器接在交换机的PoE口上,通过分离器把网络信号和电源分开,信号线进RFID读写器的485转以太网模块,电源线进读写器的电源端子。实测下来,PoE供电的稳定性取决于交换机输出功率和网线质量,选超五类或六类屏蔽网线,供电距离在80米以内完全没有问题。
需要特别提醒的是,PoE供电和普通网线供电不要混为一谈。1200PLC本身不支持PoE,不能直接把网线插到PLC的PROFINET口然后期望它供电,必须通过PoE分离器转换成PLC可用的24V电源。市面上有些非标PoE分离器输出质量一般,建议选择带过流保护的正规品牌。
3.2 485总线接线规范与屏蔽处理
485通讯看着简单,实际坑最多。RFID读写器接到CM1241 RS485模块时,A/B端子不能接反,一旦接反,通讯完全不通。终端电阻方面,如果整个485总线上只有读写器这一个设备,需要在PLC侧和读写器侧都接入120欧终端电阻,防止信号反射。
屏蔽层处理也有讲究:屏蔽层单端接地,也就是说在PLC侧接地,设备侧悬空,避免形成地环路。实际项目中第一次调试时两端都接地,结果出现了干扰导致的通讯间歇中断,改成单端接地后问题解决。485通讯线选用双绞屏蔽线,不要用普通电缆代替,双绞结构可以抑制共模干扰。
通讯参数要和RFID读写器手册完全一致,特别要注意停止位和校验位,参数不匹配时表现是数据能发出去,但读回来的数据全是乱码。波特率我建议先用9600调试,稳定后再考虑提速,现场环境干扰大时,跑19200很容易出错。
3.3 程序下载与在线调试顺序
新建工程时,先给PLC和各从站分配固定IP地址,建议用同一网段,比如1200PLC是192.168.0.10,三台Smart200分别是192.168.0.21/22/23。触摸屏设置成192.168.0.5。IP规划好了,后续找设备、排查通讯都方便。
下载程序前先做硬件配置检查,看看CPU型号选对没有,通讯模块有没有添加到机架。之后在线连接CPU时如果提示“设备不匹配”,检查一下网口驱动和PG/PC接口是否选对了网卡。
调试顺序遵循“先单轴后三轴、先手动后自动”的原则:
- 单轴点动测试,确认每个轴的运动方向和限位信号有效
- 单个轴执行回零操作,确认原点信号触发后轴停止
- 三个轴手动状态下分别走绝对定位,确认坐标和我们设定的参数一致
- 切换到自动模式,执行完整加工流程,观察每个动作的时序是否合理
- 测试异常情况:急停按下后轴是否立即停止,故障恢复后能否正常复位
我调试时会在程序里临时加入一些M变量用来触发单步执行,这样能逐步确认状态机的跳转是否符合预期。如果不加单步执行,整个流程跑起来后很难判断是哪个条件没满足导致卡住。
3.4 RFID读取联动加工参数的完整链路
RFID读取这部分,程序里做了两层保护。第一层是通讯状态判断,MB_MASTER指令返回的DONE信号有效时才认为读取成功,否则输出报警“RFID通讯超时”。第二层是数据合法性判断,读回来的标签号如果在配方表里找不到对应项,默认使用第一组参数,同时提示操作员。
现场调试时发现,RFID读取成功率直接受标签安装位置的影响。标签和读写器之间的距离不能太远,一般控制在5cm以内,而且标签尽量正对读写器天线。如果标签装歪了,偶尔能读到偶尔读不到,这种问题程序层面不好解决,只能靠机械安装调整。
整条数据链路是这样的:RFID标签在夹具上,工件进入工位后读写器自动感应,读取标签号并写入PLC的某个DB地址。PLC通过标签号索引配方表,把配方参数搬运到运动控制相关的DB里。然后启动自动加工流程,按配方参数执行定位和输出动作。这套逻辑写好之后,换工件规格不用改程序,让操作员换标签就行。
4. 现场常见问题与排查技巧
这个项目调试下来遇到的问题还真不少,挑几个典型的记录一下。这些问题如果不注意,排查起来非常耗时。
4.1 S7通讯偶发超时
1台1200PLC和3台Smart200通讯时,偶发出现数据不更新的问题。监控发现PUT/GET指令返回错误代码,而且不是每次都错,大概跑十分钟左右错一次。
排查思路:先从物理层看,网线接头有没有松动,交换机端口指示灯状态是否正常。确认硬件正常后,在程序里单步调用PUT/GET指令,看错误代码变化。后面发现是PUT/GET指令调用间隔太短,每个扫描周期都在执行,把CPU的通讯资源占满了,偶发超时是通讯队列拥堵导致的。
解决办法是把S7通讯功能块移到循环中断里,50ms调用一次,并且增加一个简单的计数器,只有上一次通讯完成之后才触发下一次。这样改完跑了三天没再出过问题。
4.2 RFID读到乱码或数据完全不对
这种问题十有八九是通讯参数不匹配。先检查PLC侧MB_COMM_LOAD的参数配置是否和RFID读写器手册一致,尤其是停止位和校验位。其次确认从站地址,如果读写器的拨码开关设的地址不是1,程序里的MB_MASTER从站地址也要对应改。
还有一个容易忽略的地方:RFID读写器上电后需要一段时间初始化,如果PLC在读写器上电瞬间就发读指令,返回的可能是空数据。程序里在启动时加一个延时,等读写器稳定后再发第一条指令,这个坑就避开了。另外485总线上的线头压接不牢也会导致偶发乱码,检查端子是否压紧,屏蔽层有没有碰线。
4.3 轴定位偏差逐渐累积
设备运行一段时间后,发现Z轴定位位置慢慢偏移,误差越来越大。排查后发现是机械问题而非程序问题:步进电机丢步。原因是Z轴负载偏大,加减速时间设得太短,电机启动瞬间扭矩不够导致丢步。
解决办法:加大加速时间,从100ms调整到300ms,降低Z轴最高速度,同时检查机械装配是否顺畅,导轨滑块有没有卡滞。程序层面还加了一个补偿逻辑:如果当前定位坐标和实际反馈坐标偏差超过设定值,自动停止报警。轴上装了光栅尺的话可以直接做闭环,但步进系统一般靠脉冲数定位,丢步只能靠机械调整来改善。
4.4 PoE供电不稳定导致设备重启
这个问题出现在一个分站设备上,现场的PoE交换机功率余量不足,当多个PoE口同时供电时,远端设备瞬间压降过大,导致设备重启。排查时在设备端用万用表测了供电电压,发现电压在18V到24V之间波动。
解决思路很直接:PoE交换机的总功率预算要留足余量,选型时以所有PoE设备最大功耗之和除以0.7作为交换机的PoE功率预算。如果已经装了交换机,可以给远端设备多加一个DC-DC稳压模块,把波动电压稳定在24V再进设备。另外,检查网线线芯是不是用了质量差的铜包铝线,这种线电阻大,长距离供电压降明显,换成无氧铜网线后问题明显缓解。
5. 程序归档与后续扩展思路
程序调通之后,需要把整个工程文件规范整理一下。项目归档时我习惯做三件事:第一,把所有注释补齐,特别是运动控制轴参数和通讯模块的配置说明,防止后面换人维护看不懂;第二,把配方数据导出备份,避免触摸屏数据丢失后重新录入;第三,写一份调试记录,标注现场修改过的参数和原因,这些经验信息对后续设备复制很有用。
这套基于1200PLC的三轴数控程序,目前复制到同类三轴设备上,只需要调整轴参数、配方数据和点位表就能适配。如果后续设备数量增加,可以在程序里加入以太网远程监控功能,通过S7协议把设备状态上传到上位机或MES系统。需要更高精度时,可以把步进电机换成伺服电机,利用1200PLC的高速计数通道读取编码器反馈,实现闭环控制。
在三轴数控程序这类项目上,PLC方案稳定可靠、调试周期短、后期维护容易,项目落地率高。但稳定是改出来的,不是一次就能调好的,建议你们上手时多在通讯和轴参数上做验证,这两块是最容易出问题的地方,提前踩掉坑后面就顺利了。
本文还有配套的精品资源,点击获取