
最近帮朋友改造一台三轴绕线机原方案是步进电机加脉冲控制效率一直上不去。换伺服的时候我直接把控制方式改成了PROFINET总线PLC选的S7-1200伺服用的V90省掉了一大堆脉冲接线调试效率高了不少。其实在中小型设备上用S7-1200走总线控制V90伺服已经是目前最主流的方案之一很多做非标设备的朋友都想找一套能直接套用的程序模板。今天就把我这套总装下来的模板拆开讲讲里面包含PLC程序和西门子触摸屏程序把组态、编程、HMI、调试的完整链路都捋一遍希望能给正在做类似项目的人一点参考。这套模板不是我随便拼出来的是实际跑过三台设备、前前后后改了四五轮才稳定下来的。定型的版本用的是博途TIA Portal V16打开PLC侧以CPU 1214C DC/DC/DC为核心伺服侧是V90 PN版本搭配SIMOTICS S-1FL6伺服电机触摸屏用的KTP700 PN基本面板。项目里把每一路轴都封装成了一个数据块手动、半自动、定位、回零、报警这些场景全部覆盖到了后面做新项目只需要改机械参数和设备数量就能继续用。1. 为什么我选择用PROFINET总线控制V90而不是脉冲方式先说一个很多新手容易忽略的点V90伺服本身支持两种控制方式一种是传统的脉冲位置控制也叫PTO方式另一种是走PROFINET通信的报文方式。我在第一版的老设备上确实用过脉冲控制当时最大的感受就是——线真的多。脉冲、方向、使能、复位、报警输出每根线都要从PLC拉到驱动器而且V90的故障代码只能靠面板看PLC这边拿不到具体报警信息出问题只能跑过去蹲在电柜前面看调试效率很受影响。换成总线控制后现场就只有一根网线从PLC交换机直接到V90的PN口所有的控制字、状态字、速度设定值、位置反馈、故障代码全在这根网线里来回传。对设备维护来说最大的好处是驱动器的实时状态在触摸屏上就能看到包括当前位置、当前速度、报警代码操作工不用开柜门也能知道设备出了什么问题。1.1 脉冲控制与总线控制的实际差异我列一个对比表这个表我很多培训场合都用过基本能说明问题对比维度脉冲控制PTOPROFINET总线控制硬件接线需要脉冲方向使能报警一根轴至少5-8根线一根工业网线即可速度设定精度受脉冲频率上限限制高速时脉冲频率很高32位浮点速度给定精度高位置反馈需要额外接编码器反馈线或用开环总线读回编码器位置全闭环故障诊断驱动器面板显示PLC拿不到具体代码V90故障字通过总线映射到PLC可直接上HMI参数设定脉冲当量靠驱动器参数PLC计算机械参数在工艺对象里统一设置扩展性增加轴数等于增加I/O点成本高加一台交换机就能加轴程序块复制即可从表里看得很清楚总线控制无论从调试效率还是后期维护角度来看都比脉冲要省事。尤其是项目后期改机械参数的时候脉冲方式要重新计算电子齿轮比改起来头大而总线方式在博途工艺对象里直接改螺距、减速比就行PLC程序一个字都不用动。1.2 这套模板的硬件配置和适用范围如果打算直接照搬这套模板建议硬件配置至少是这样PLCS7-1200系列的CPU我用的1214C DC/DC/DC如果轴数少于3轴1212C也够用伺服V90 PN版是带PN口的那款不是脉冲型的V90配S-1FL6低惯量伺服电机触摸屏KTP700 Basic PN也可以换成Smart Line系列只要支持PROFINET组网就行网络一台普通工业交换机推荐带2个光口的型号方便以后扩展这套模板的定位就是中小型单机设备典型场景比如绕线机、送料机、小型装配机轴数一般在1到6根之间。如果轴数超过8根我更推荐上S7-1500加V90虽然程序框架差不多但1200的工艺对象上限和CPU性能还是有一点瓶颈的没必要硬撑。2. 硬件组态让S7-1200和V90规规矩矩对上话很多人拿到这套模板打开博途第一反应是想先看程序怎么写我反而建议先看硬件组态。因为V90走总线通信能不能正常建立物理连接直接决定了后面所有逻辑调试是否顺利。我在模板里已经把组态步骤做完了但你要自己新建项目或者加轴的时候还是要懂这套流程。2.1 博途里的组态步骤详解打开TIA Portal V16新建项目后完成三步基础组态。第一步添加S7-1200 CPU。在项目树的设备组态里拖入对应型号的CPU设置好以太网IP地址。这里有个小习惯供参考我一般给PLC静态IP设为192.168.0.1V90设为192.168.0.50开始的地址段触摸屏设为192.168.0.10。理由很简单把PLC固定在1触摸屏用10伺服从50往后排这样以后加设备不会乱了IP规划。第二步导入V90的GSD文件并添加为IO设备。注意V90不是博途里直接就能搜索到的PROFINET设备必须先从西门子官网下载V90的GSDML文件然后在项目里通过其它现场设备导入。导入完成后把V90拖到网络视图用网线连接CPU的PN接口和交换机。第三步分配设备名称。PROFINET通信不依赖IP地址寻址IP只用于调试和诊断真正管用的是设备名称。在设备组态里要给V90命名一个设备名比如V90_axis1这个名字必须和V90驱动器面板里设置的PROFINET设备名称完全一致一个字母都不能差。很多人第一次调不通十有八九就是这一步的名称不一致。在设备视图里还要给V90分配IO地址区模板里输入输出各分配了12个字节。这个地址区和后面程序读写控制字状态字直接对应要记录下来备用。2.2 V90侧的面板参数设置V90驱动器端的参数设置容易被忽略但它恰恰是通信建立的关键。V90面板上有几组参数是模板正常运行时必须确认的P2900PROFINET通讯参数的内部IP地址默认是192.168.0.50之类的要和博途里的一致P2901PROFINET设备名称这就是刚才反复强调的那个名称必须在面板上逐字输入输入的时候可以通过面操作按键修改很多现场没电脑就靠这个改报文类型V90里对应参数是P2960之类的设置项模板里用的标准报文3加上扩展的SINAMICA报文这个必须和博途组态里选的一致我建议在V90面板上每改完一次参数就做一次断电重启因为部分PROFINET参数在运行状态下是不允许修改的直接改可能没效果重启后才会真正生效。2.3 报文类型的选择逻辑标准报文3与西门子报文111V90在PROFINET下可以选几种报文我模板里落定的是标准报文3这是一个12字节输入、12字节输出的通信数据结构。为什么选它而不是更复杂的基本位置报文105因为对于大多数单机设备的运动控制速度控制加外部定位指令已经完全够用位置闭环在PLC的工艺对象里做不需要把位置PID下放到驱动器。选标准报文3还有个好处不同版本博途和GSD文件的兼容性更好出问题的概率低。如果项目用了V90的内部的EPOS定位功能才需要选报文105或者111那种情况下驱动器自己做位置闭环PLC只发目标位置不过我不建议这么做因为PLC工艺对象的调试工具更直观能省不少时间。3. PLC程序的核心轴工艺对象与运动控制块的实战用法这部分是模板的灵魂。V90的PN控制逻辑说白了就是靠S7-1200的工艺对象来完成轴运动控制然后通过系统自带的运动控制指令MC_Power、MC_MoveVelocity、MC_MoveAbsolute、MC_MoveRelative、MC_Home等来实现各种动作。我在模板里没有把工艺对象当作黑盒直接调用而是把参数设置、程序调用、状态评估全部整理成了标准化框架。3.1 工艺对象里面那几个最容易设错的参数打开博途左侧的工艺对象分支新建一个轴对象命名比如Axis_1。这个说法在S1500和1200里通用V90就挂在这个轴对象下。工艺对象里的测量单位建议把位置单位固定为mm而不是默认的LU长度单位。我在做绕线机项目时刚开始用LU以为自己写逻辑时不用换算结果每次查位置都很懵触摸屏上显示的位置和实际差好几百倍。后来统一改成mm速度单位设成mm/s加减速时间直接填秒调试直观很多。机械参数里最关键的是每转的负载位移和减速比。以丝杠传动为例丝杠螺距是10mm减速比是1:1那负载每转一圈就动10mm这个数直接填进去就行。如果经过减速机速比是3:1那电机转一圈负载只走10/3约等于3.333mm填对这两个值位置精度就由机械结构决定PLC不需要额外换算。此外还必须检查两个极限参数软限位开关位置和硬件限位信号。模板里把硬件限位接到了PLC的I0.0和I0.1对应工艺对象的下限位开关输入和上限位开关输入。这一项千万不能省否则调试过程中轴飞车撞掉机械哭都来不及。3.2 使能与点动MC_Power和MC_MoveVelocity配合使能是V90运行的前提。我见过很多新手直接一上电就给MC_Power发送Enable信号结果轴不动其实使能信号要给到V90的STO电路安全转矩关断。在模板里我先把V90的STO端子接通然后程序里MC_Power的Enable管脚置TrueStopMode设为0执行这条指令后V90的抱闸才会打开电机才会进入可运行状态。点动这块用的是MC_MoveVelocity速度给定值从HMI手动画面里输入。模板里做了一个斜坡速度渐变逻辑点动时先将设定速度通过线性化处理缓慢增加而不是直接把触摸屏填的目标速度丢给指令。这样操作工手动对刀的时候不会一下冲过去安全性好很多。这里贴一段简单的调用片段MC_Power_DB( Enable : HMI_StartAck, StopMode : 0, Axis : Axis_1, Status Axis_1_Status, Error Axis_1_Error, ErrorID Axis_1_ErrorID ); MC_MoveVelocity_DB( Execute : HMI_JogForward, Velocity : ManualSpeedSet, Acceleration : 500, Deceleration : 500, Axis : Axis_1 );注意MC_Power的Enable一旦为True就不要再频繁的False和True来回切每次断开再闭合都会触发驱动器重新做使能如果带了抱闸长时间快速通断会烧抱闸线圈这是一个很常见的现场事故点。我在模板里专门加了屏蔽和保护逻辑。3.3 位置控制MC_MoveAbsolute的用法和套路位置自动定位是设备最常干的活。我用MC_MoveAbsolute做绝对定位模板里给它配了一组目标位置数组可以预设最多16个工位位置触摸屏上直接选工位号就能自动跑到目标位置。定位完成判断不能光看MC_MoveAbsolute的Done信号还要从工艺对象里读取位置实际值和目标位置差的绝对值是否小于设定的到位窗口值。到位窗口我把默认值设定为0.05mm。如果设备允许更大的偏差可以改大但0.05这个值对于一般丝杠加伺服的结构来说是非常稳的。太小的到位窗口会导致定位明明结束了PLC还一直判断在运动中触摸屏上的状态灯一直在闪烁让人误以为程序出了问题。3.4 回零策略绝对值编码器的日常处理V90伺服电机可以配绝对值编码器好处是断电后位置不会丢理论上不需要每次开机回零。但实际使用中有个前提V90的绝对值编码器必须安装了编码器电池并且第一次使用时要完成绝对位置确立。如果编码器电池没装或者电池耗尽设备上电后工艺对象会报编码器故障。我在模板里做的处理方式是PLC开机后先读取V90的绝对值编码器状态如果状态正常直接将工艺对象里的参考位置设定为0相当于PLC把当前物理位置当作软零点如果状态异常则提示操作工执行一次回零。模板里同时保留了三种回零方式分别是绝对值回零、主动回零寻零脉冲和被动回零。对于小型设备我强烈推荐使用绝对值回零逻辑上最简单只需要上电时执行一次MC_Home指令将当前值数值映射到零点位置即可不需要找零位开关。3.5 V90状态字解码报警和运行状态怎么读出来标准报文3的输入字里包含状态字这个状态字是16位二进制每个bit代表不同含义。模板里专门写了一个比较的小程序把状态字拆成几个运行中、使能、抱闸打开、故障报警这几个关键bit映射到PLC数据块和HMI灯上。这么做之后维护人员看设备一眼就知道驱动器现在是什么状态比读面板上的数字直观太多了。V90故障代码同样通过报文传回PLC地址是输入字偏移6的位置。模板里把这个值保存在数据块的报警寄存器里触摸屏报警画面直接显示这个值。这个时候可以对照西门子V90诊断手册查出故障原因。刚开始用这套模板时这个功能会帮你节省大量蹲守电柜的时间深有体会。4. 触摸屏程序操作工视角下的画面该怎么组织一套设备能不能顺利交付关键看操作工用起来顺不顺手。程序写得再漂亮HMI画面一塌糊涂也是白搭。这份模板里触摸屏程序是完整的KTP700 Basic项目画面结构我按这个设备的三层逻辑来分的总览层、操作层、参数层。4.1 画面结构规划启动画面是一张设备总览图。总览图上放了当前工位位置三轴坐标运行状态灯当前报警代码。操作工不需要进任何子画面就能看到设备是否正常。手动操作画面是使用频率最高的布局上左边一列是X、Y、Z三轴的点动按钮右边是速度设定和使能开关中间是当前位置显示。三轴按钮我做了互锁防止同时按下两个轴导致机械干涉。这个互锁在PLC里也做了HMI上再做一层只是为了操作提示更友好两层保险。参数设置画面要给权限分级。普通操作工只能改速度、加减速时间、目标工位位置管理员才能改回零方式、单位设置、极限位置。KTP700 Basic支持用户管理功能登录账号和密码模板里都已经设好默认管理员账号是admin密码放在交付文档里。这里建议现场交付时务必改掉默认密码否则设备随便被人改参数出了事故很难追溯。4.2 HMI变量连接和PLC数据块的映射方法触摸屏和PLC通讯走的是PROFINET但注意不是把HMI当成PN设备添加在IO控制器下面而是在博途的HMI组态里建立连接协议选PN/IE目标是PLC的IP地址。变量连接我建议直接通过PLC数据块的PLC变量方式建立不推荐在HMI侧新建一堆内部变量来中转因为那样画面多了以后很容易发生变量漏连的情况。模板里我在PLC侧专门建立了一个HMIData数据块把所有需要显示或修改的变量集中放在里面HMI侧的变量表全部以S7_1200_DB开头的指针指向这个数据块。这样有新增变量时只需要在PLC数据块里加成员然后刷新HMI变量不会漏。调试的时候用HMI的监控功能直接看DB值也很方便比在PLC程序里一个点一个点搜要快得多。4.3 报警画面别只放一句话报警画面这块我要特别多说两句。很多设备的HMI报警画面就放一条文本操作工看到设备故障四个字基本等于没看到。模板里报警画面是带上下文信息的比如X轴超限-请检查机械位置或软限位参数报警发生时间、报警值、恢复时间都会记录形成一个简单的报警履历表。KTP700自带报警缓冲功能断电后记录也还在后续追溯故障原因很有用。报警优先级也要做区分急停报警、超限报警算一类要配声光提示普通定位偏差报警算二类只弹消息不响铃。这样车间吵的时候操作工不会被只会哔哔叫的设备逼疯。5. 调试实录这套模板跑下来踩过的几个真坑模板虽然定型了但它也不是凭空出来的前面带过几次项目踩了不少坑。这些坑我全在代码里做了规避但你自己做新项目的时候最好也了解成因会帮助你加深对V90总线控制的理解。5.1 使能后驱动器立刻报F7490故障排查全过程有一台设备调试时遇到过这个情况PLC程序一给MC_Power使能启动驱动器V90面板马上弹F7490查手册说是内部电压故障但重新上电后故障能复位一旦运行几分钟又报。排查链路花了大概两个多小时最后发现原因是抱闸。当时用的是带抱闸的V90电机抱闸线圈由V90本体供电抱闸打开的时候瞬间电流很大而那个设备电柜进线电压不稳抱闸动作瞬间把驱动器母线电压拉低了就触发了欠电压故障。后来在模板里把抱闸控制改成由输出点先给电、延时100ms后再给MC_Power的Enable信号错开电流冲击问题就再没出现过。这件事给后续项目的教训是带抱闸轴的使能时序一定要错开不要指望同时给信号。5.2 报文类型不一致导致的通信数据错乱还有一次是换了一个型号的V90下载程序后轴能动但速度老是忽快忽慢状态字读出来也不对。查了一圈发现是设备商的V90参数里报文类型是报文105而博途组态里给的是标准报文3两边数据结构长度不一样一个12字节的报文被映射到另外一个长度更长的区域数据错位了。V90的报文类型在驱动器参数里有明确显示比如标准报文3对应的是P29603、西门子报文105对应的是P2960105。这个值必须和博途组态里设备视图所选的报文一致。模板里给每个轴的数据块加了一个报文类型注释字段做新项目时提醒自己单独检查这一项。5.3 绝对值编码器电池耗尽导致位置丢失有一台设备年前停机放假年后开机时发现位置全部丢了。当时我在回老家远程排查发现是V90绝对值编码器背后的电池没电了。电池本来就是易耗品尤其设备长期断电的环境编码器电池寿命会缩短。那台设备的电池盒没有装对电池放反了导致提前消耗。模板里现在加了一个上电检查时间戳逻辑PLC内部用实时时钟记录每次上电时间如果超过30天没有上电且编码器是绝对值模式就提醒用户检查电池电压。虽然这个检查不能替代电池更换但至少能给维护人员一个更换的窗口期。另一个建议在设备说明文档里明确标注编码器电池每两年强制更换别等没电了再换。5.4 V90面板显示通信中断而博途却显示正常的问题最后这个坑比较阴间。博途里在线监控一切正常工艺对象显示可用但V90面板上一直报通信中断。最后查出来是调试笔记本、PLC、V90之间用了同一个交换机调试笔记本的网卡开了另一个虚拟网卡的IP段把广播流量搞乱了。V90的PROFINET通信对实时性和广播包处理比较敏感调试电脑的网卡最好就是单一IP把虚拟网卡禁用就好了。另外一个经验就是现场调试用的交换机最好选工业级的普通家用交换机的转发延迟大容易在轴数量多的时候出现周期性抖动或者偶发丢包。我模板里标注了推荐的交换机型号是西门子的1600系列主要图个稳定。6. 模板二次开发时怎么改才能不把框架改坏模板最大的价值不是拿来直接用而是拿来当骨架。很多朋友买模板回来以后第一件事就是把程序翻个底朝天我其实不建议这么做。你只需要理解清楚数据块和程序块的边界二次开发会非常顺手。6.1 新增一轴时需要注意的机械参数和数据块复制新增轴时在博途左侧工艺对象里复制现有轴对象然后改名字和参数。每一根轴在PLC变量表里都对应一组IO地址模板里全部用符号寻址新增轴时一定要把输入输出地址和工艺对象绑定关系改对。很多复制出来的僵尸轴就是因为没有重新分配输入输出地址导致组态了但驱动器根本收不到控制字。数据块方面我把每一轴的数据抽成了一个独立的UDT结构体比如名字叫AxisData里面包含目标位置、当前速度、点动速度、使能状态、报警值等字段。新轴只需要新实例化一个UDT变量即可不用改程序逻辑程序基于UDT的索引变量循环调用这个是这个模板框架的核心优势。6.2 PLC程序块的组织逻辑别把代码都堆在OB1里模板的程序架构是OB1作为扫描主程序里面只调用三个功能块轴控制块、HMI数据交换块、报警处理块。轴控制块内部包含使能、点动、定位、回零的状态机。这样做的最大好处是以后你想从S7-1200移植到S7-1500时只需要复制这几个块重新映射IO变量就行比一锅粥的梯形图爽太多。状态机是模板的核心建议不要轻易大改。每根轴的运行逻辑都依赖状态机的步号来流转步号同时作为HMI上的运行状态显示值。如果自己往状态机里乱塞分支很容易出现步号乱跳、画面显示和实际不符的情况。有改动需求时建议先新增独立功能块而不是改原有状态机逻辑。6.3 和HMI打包交付时交付清单里必带的几样东西这套模板配套的触摸屏程序在交付时不是拷到U盘扔给设备厂就完事。我习惯在交付清单里放几个必需文件完整的博途项目归档文件建议V16及以上版本能直接打开V90 GSDML文件不然对方用别的版本博途会找不到设备V90的驱动器参数备份文件或者参数表截图电气原理图包含STO接线、抱闸接线、限位接线这是后续维护的关键模板使用说明重点写清楚哪些参数可以改、哪些不能改这几样东西打包好基本能保证后续接手工程师不需要打电话问你这个变量怎么改为什么设备报警40001。7. 模板使用过程中的几个补充经验写到这里关于模板本身的内容基本讲完了。最后我再补充几条这些年用V90总线控制总结出来的经验算是对新人最实在的交代。第一条V90的增益参数如果不是特别了解伺服整定的原理建议一开始就用驱动器的自动整定功能。V90有一键优化的实用功能通过面板或者博途里都可以启动让驱动器自动识别负载惯量比把增益算好。模板里对轴的增益基本来自这个优化结果没有特殊要求时不要手动填一些过度自信的Kp值。第二条关于安全回路STO接线虽然功能上可以通过总线控制禁用但我还是建议保留硬接线的急停回路。伺服设备不像普通设备一旦轴飞车切断使能是唯一能在毫秒级内停机的办法总线指令再快也有通信周期。模板里的急停逻辑是PLC程序级联的硬接线输入配合V90 STO实现的这块不要去简化。第三条生产节拍优化方面如果有频繁定位的需求把MC_MoveAbsolute的加减速时间适当调大反而能提高效率因为过度短的加减速时间会引起驱动器报过流伺服实际到不了你设定的速度。模板里默认加减速是0.2秒实际设备如果发现定位抖动优先加大减速时间而不是降速度。第四条如果设备需要和别的PLC通讯比如上层MES或者SCADA要读设备状态模板里预留的MODBUS-TCP或者PROFINET通讯接口可以直接把HMIData数据块映射出去不需要额外写太多代码就能做到数据透传。最后说心里话V90加1200这套组合在这个行业里用了很多年依旧能打。这套模板拿出来不是想说它多完美而是希望刚入行或者正在被调试弄得焦头烂额的朋友有个可靠的起点。拿着模板上设备比从零开始撸博途项目要快得多但务必理解背后每一处设计的原因否则出了问题你还是会回到看文档翻手册的原始状态。项目做多了以后你会发现真正值钱的不是那一堆代码是代码里沉淀下来的这些边界条件和防错逻辑。模板在手只是一个下限把原理吃透后续才知道往哪里扩展和优化。