S7-1200通过PROFINET控制V90伺服:可复用工程模板详解

发布时间:2026/10/1 12:15:31
S7-1200通过PROFINET控制V90伺服:可复用工程模板详解 做这套S7-1200总线控制V90伺服模板前前后后花了大概三个星期从选型、组态到程序调试、触摸屏画面做完。中间踩了不少坑也总结出一些现成的套路。如果你正好在搞西门子这套方案或者准备把老设备从脉冲控制改成PROFINET总线控制这份东西应该能帮你少走不少冤枉路。这套模板解决的核心问题是一套可以复用的、S7-1200通过PROFINET总线控制V90伺服的完整工程框架PLC程序和触摸屏程序都在里面。我尽量把每一步为什么要这么做、参数怎么算、哪些地方容易出问题都讲清楚。内容适合现场调试的电气工程师也适合在学校学PLC、正准备做伺服控制毕业设计的同学。1. 项目整体设计与方案选型逻辑1.1 为什么选择S7-1200配合V90而不是脉冲方式先说结论如果你手头是全新的设备且PLC和伺服数量不算特别多比如一条产线上就两台三台伺服S7-1200 V90走PROFINET总线控制是性价比和后期维护都比较均衡的方案。以前很多设备用的是PLC发脉冲控制伺服驱动器。脉冲方式不是不能用但有几个问题很烦人每个伺服轴要占PLC的高速输出点轴多了PLC点数就不够得加扩展模块。脉冲频率上限决定了速度上限想要高速时经常不够用。脉冲线抗干扰能力弱现场变频器一多就容易丢脉冲位置就走不准。反馈信号要想实时监控还得单独接编码器线到PLC。走PROFINET总线之后位置给定、速度给定、使能信号、实际位置、实际速度、报警代码全部走一根网线抗干扰能力强很多而且V90在PROFINET模式下能反馈大量内部参数不用额外硬接线。还有一个很实际的点后续如果工艺变更、加减速时间调整直接在程序里改参数就行不用动端子接线。1.2 模板的硬件系统架构整套系统的最小编制是这样的部件推荐型号说明PLCCPU 1214C DC/DC/DC固件V4.4以上根据IO点数选1214C一个基本够用伺服驱动器V90 PN版本如6SL3210-5FE...系列注意必须是带PN接口的普通脉冲版本不行伺服电机SIMOTICS S-1FL6系列功率根据负载选触摸屏KTP700 Basic PN或KTP900七寸十寸都行PN口直连交换机非网管工业交换机如西门子CSM1277如果只有PLC伺服触摸屏三个PN设备也可以不接交换机PLC上有两个网口通信结构很简单S7-1200的PROFINET口通过交换机或直连接到V90驱动器和KTP触摸屏。V90作为PROFINET IO设备由S7-1200IO控制器分配设备名称和IP地址。触摸屏走S7协议连接PLC显示运行状态和操作按钮。1.3 为什么把这套做成模板做模板而不是一次性项目核心原因是大部分伺服控制的工艺逻辑其实是差不多的。手动模式用点动回原点然后按绝对位置定位个别设备加个速度控制或相对挪动。把这些标准逻辑做成块换电机、换负载时只改轴参数和定位数据程序主体不用动。我做的模板里程序分成这几个块OB1主循环调用各轴功能块和HMI读写逻辑。工艺对象轴组态在TIA Portal中组态每个伺服轴。FB功能块手动模式点动回零使能、自动模式绝对定位相对定位。DB数据块轴参数、定位位置表、运行状态字。HMI画面主监控、手动操作、自动定位、参数设置、报警。这样设计的好处是现场调试新设备时我可以先把程序下载进去只改DB里的轴参数就能跑通基本功能。设备方需要调整位置时直接在触摸屏参数画面改不用拿电脑。2. 核心细节解析与实操要点2.1 TIA Portal中的硬件组态与GSD文件处理用博途做这套方案第一步是在TIA Portal里把硬件添加好。需要注意版本兼容性V90的GSD文件或HSP硬件支持包要装对。如果是V15及以上的博途V90一般都在HSP里需要到博途的支持包菜单里检查并安装对应版本。组态时关键几步添加S7-1200 CPU设定IP地址和PROFINET设备名称。从硬件目录里找到V90 PN拖到PROFINET网络上。给V90分配设备名称比如v90_axis1IP地址可以自动分配。在V90的设备视图里选择通信报文后面详细说。这里最容易翻车的地方是V90的设备名称和PLC侧的组态名称必须完全一致而且如果现场有多个V90名字不能重复。曾经遇到过调试时发现通讯时通时断查了半天发现是交换机上接了另一台设备的V90两个驱动器的设备名一样导致IO控制器每次只能跟其中一台建立连接。另外一个细节如果V90驱动器已经用调试软件V-Assistant配置过IP和设备名博途里组态时看到的设备名可能跟驱动器的实际名称对不上。这时要么在博途里改成跟驱动器一致要么用V-Assistant或驱动器面板改回博途里的名字。优先改驱动器侧的因为设备名最终是由IO控制器下发的但驱动器如果没有清除之前的配置可能会冲突。2.2 V90通信报文类型的选择V90走PROFINET报文选型是非常关键的一步。报文决定了PLC和驱动器之间传输哪些数据。常用的有标准报文3、标准报文7、西门子专用报文等。对于S7-1200配合V90做基本定位控制建议选择标准报文3位置控制或者西门子的报文102/103。我模板里用的是标准报文3它的结构是控制字1CW包括使能、急停、正/负方向使能、运行模式等。速度给定默认单位是LU/min可配置。目标位置LU单位。状态字1SW包括准备就绪、运行中、故障信号等。实际位置。实际速度。这里有个容易混淆的概念V90在PROFINET模式下标准报文里的速度给定和目标位置单位跟驱动器内部的参数设置有关。V90里有一个位置控制模式和速度控制模式的选择通过P29009等参数设置虽然走总线之后大部分功能由PLC下发的控制字管理但驱动器侧的报文类型和控制模式必须匹配。我的做法是先在V-Assistant软件里把V90设置为内部设定值位置控制PROFINET模式选择通信报文为标准报文3然后下载参数到驱动器。博途侧组态也要选择同样的报文类型。两边不一致的话通讯能建立但PLC的轴控制指令会报错因为控制字和状态字的位定义对不上。实操中我还试过另一种组合使用西门子的报文102扩展报文多了一些内部报警字节和跟踪信息。如果不是特别需要监控驱动器内部状态标准报文3就够用了少一点数据还能降低通讯负担。2.3 伺服轴的工艺对象配置在博途里S7-1200控制V90需要在PLC的工艺对象里创建一个定位轴对象。这个工艺对象是PLC内部软件层面的轴它负责把运动控制指令如MC_MoveAbsolute翻译成PROFINET报文发给V90。配置工艺对象时重点看这几个页面基本参数页选择驱动方式为PROFINET选择对应的硬件接口和V90设备然后选定报文。这里要注意博途会提示你选择安全报文和非安全报文普通应用不用选安全报文V90本身不支持安全功能选了反而容易出问题。单位页这是大多数人都被坑过的地方。默认情况下定位轴的单位是mm需要设置负载的螺距、电机每转的脉冲数或LU数。V90内部的编码器是每转几百万个增量但通过PROFINET报文发送的位置值一般按LU单位来。LU是长度单位可以理解为位置分辨率。我一般设置为电机转一圈10000 LU即内部位置指令的精度是0.0001转如果负载是丝杠导程10mm那1mm就等于1000LU。这个分辨率对大多数应用足够而且数值大小在HMI上显示也直观。机械参数页设置电机每转对应的负载位移。比如丝杠导程10mm就是电机转一圈负载走10mm这里填每转长度单位为10000LU或根据导程换算的值。还要设置减速比如果电机和负载之间有减速机必须在这里填减速比否则位置走不准。动态参数页设置加减速时间、速度限值、急停时间。这里我建议速度上限值稍微留点余量不要刚好等于你工艺需要的最大速度因为加减速过程中实际速度可能超过设定目标值。加减速时间的选择也跟负载惯量有关负载重、惯量大加减速时间要长一点否则启动瞬间可能报过载。回零参数页设置回零方式。V90支持的几种回零模式主要通过工艺对象配置。我在模板里用的是主动回零数字量输入信号即使用参考挡块编码器零点这样回零精度高适合需要绝对定位的场景。如果现场没有安装参考点开关可以用当前值设为零方式但这个精度只能靠人工对齐。2.4 触摸屏的连接机制设置触摸屏程序这块最核心的不是画面多炫而是连接机制的设置。西门子HMI有个连接机制概念里面有三种模式决定PLC如何访问HMI的数据记录、报警缓冲等完全访问优化无数据记录兼容性很多人在博途里组态KTP触摸屏和S7-1200通讯时SIEMENS HMI默认的连接机制可能是优化但实际上老版本固件的HMI只支持兼容性。这导致的现象是变量表下载进去了但触摸屏上显示不出数值PLC侧也没有报通讯错误。我遇到过一次伺服能正常动作触摸屏就是死了一样。后来在HMI设备属性里把连接机制改成完全访问或兼容性重新编译下载画面才活过来。另外触摸屏变量的采集周期也值得注意。如果默认采集周期太快比如100ms而HMI和PLC之间发送的数据量大可能出现画面卡顿。一般监控变量设500ms到1s就足够操作按钮可以单独设置成按需读取模式按下时才读写。3. 实操过程与核心环节实现3.1 完整的PLC程序结构这套模板的PLC程序我按功能模块划分成以下FB和OB主循环OB1调用轴状态刷新FC把DB里的指令状态映射到HMI变量。调用手动操作FB。调用自动定位FB。报警处理逻辑。FB_ManualControl手动模式输入使能信号、点动正转/反转信号、回零信号、复位信号。输出当前状态字、回零完成标志、报警代码。内部调用MC_Power、MC_Home、MC_MoveVelocity、MC_Reset。FB_AutoControl自动模式输入启动信号、目标位置号通过位置表索引、停止信号。输出定位完成标志、当前活动步骤。内部调用MC_MoveAbsolute、MC_Halt。关键程序块长的样子大概是这样的// 使能轴 MC_Power_Instance( Enable : HMI_Tags.AxisEnable, StopMode : 0, Axis : Axis_V90, Status AxisStatus.PowerStatus, Error AxisStatus.PowerError); // 调用回零 MC_Home_Instance( Execute : HMI_Tags.HomeExecute, Position : 0, HomingMode : 3, Axis : Axis_V90, Done AxisStatus.HomeDone, Error AxisStatus.HomeError);这里有几个需要特别注意的地方MC_Power的Enable信号不要直接跟急停串在一起。现场调试时曾经出现过按了急停后V90断电但PLC侧MC_Power的Enable还是TRUE等急停复位V90自动重新上电轴就开始动。为避免这个风险程序里我会把急停信号作为轴使能的必要条件用一个中间变量延时确保急停按下时Enable被拉掉而且复位后需要手动重新触发使能。StopMode参数要合理选择。MC_Power的StopMode为0是默认的紧急停止按工艺对象里的急停时间减速为1是立即停止。根据现场安全要求选择我一般选0让轴平滑停下来避免机械冲击。如果遇到安全隐患需要立即停止用MC_Halt配合急停信号。3.2 手动模式的程序实现手动模式的主要任务包括使能、点动、回零、复位。点动实现点动用MC_MoveVelocity给定一个恒定的速度当点动按钮松开时把速度给定设为0。但直接给0会导致轴极速减速甚至过流报警所以正确的做法是松开按钮时调用MC_Halt让轴按设定的减速时间停止。// 点动正转 IF HMI_Tags.JogForward AND NOT HMI_Tags.JogReverse THEN Manual_Jog.Execute : TRUE; Manual_Jog.Velocity : 5000; // 单位LU/min即50转/分钟 ELSE Manual_Jog.Execute : FALSE; END_IF; MC_MoveVelocity_Instance( Execute : Manual_Jog.Execute, Velocity : Manual_Jog.Velocity, Axis : Axis_V90, InVelocity AxisStatus.Jogging, Error Manual_Jog.Error);点动速度我一般设在额定速度的5%~10%左右太慢了不好找位置太快了危险调试人员反应跟不上。回零实现回零用MC_HomeHomingMode选3主动回零使用输入信号。需要先在工艺对象的回零参数里配置好参考点开关接到哪个PLC输入点。回零完成后轴的当前位置会被设置成你在MC_Home里Position参数指定的值一般设0。常见坑如果参考点开关接的是PLC的普通输入点而PLC输入点信号抖动比如感应开关靠近金属时的抖动回零位置可能差几个脉冲。解决办法是在PLC程序里对输入信号加滤波或者用带滞回功能的接近开关。3.3 自动模式的程序实现自动定位用MC_MoveAbsolute目标位置从一个位置表DB里读取。位置表是用数组实现的比如DB里面定义PositionTable : ARRAY[1..20] OF STRUCT TargetPos : DInt; // 目标位置单位LU MoveSpeed : Real; // 移动速度单位LU/min Accel : Real; // 加速度 Decel : Real; // 减速度 END_STRUCT;通过HMI上的位置号选择框1~20PLC读到位置号后把对应的目标位置和速度赋给MC_MoveAbsolute。这样做的好处是业务方想加一个新的位置点不需要改程序直接在触摸屏参数画面填数值就行。自动定位的完成信号要注意MC_MoveAbsolute的Done信号只在定位完成那一瞬间给一个TRUE如果程序里没锁存可能一闪而过HMI上还没来得及显示。所以程序里要用一个置位逻辑把完成信号锁存起来再通过HMI复位完成按钮清除或者等下一次启动信号时自动复位。这里还要考虑到位精度的问题。MC_MoveAbsolute本身有动态跟随容差和到位容差等参数在工艺对象里配置。如果容差设得太小比如1LU而机械本身有间隙或弹性变形会经常报跟随误差过大报警。合适的方式是先从10~50LU的容差开始调看实际效果再收紧。3.4 V90驱动器侧的参数核对PLC和触摸屏程序写完之后还有一个步骤经常被忽略——V90驱动器的基本参数核对。即使走PROFINET驱动器下面这些参数仍然会影响运行效果参数号含义我常用的值说明P29009通信报文选择标准报文3必须与PLC组态一致P29010PROFINET网口设定智能模式一般保持默认P29235编码器类型1增量式或2绝对值带电池绝对值编码器可选2P29240电机旋转方向0或1根据实际接线确认P0300电机铭牌参数自动识别用V-Assistant自动配置P29065抱闸延时视抱闸类型如果电机带抱闸必须设置其中有抱闸的电机垂直轴经常用一定要注意抱闸的打开和关闭时机会影响轴是否会下滑。PROFINET控制模式下MC_Power使能后V90会根据内部逻辑控制抱闸但前提是你在驱动器里配置了抱闸输出参数。这个如果忘了设电机可能一直在抱闸状态下强行运动直接报过载报警。另外V90驱动器本身有一个运行模式选择旋钮或参数在PROFINET控制时要把模式选择设到PROFINET通讯位置。具体看驱动器铭牌或V-Assistant的提示找不到的话检查组态就能发现因为通讯建立了但轴不动作的时候十有八九是这个模式没设对。3.5 触摸屏画面的最终效果触摸屏程序我设计了五个主要画面主监控画面显示两个轴的当前位置、当前速度、运行状态、报警状态以及设备的整体启停按钮。手动操作画面每个轴一行包含使能/禁止按钮、点动正转/反转按钮、回零按钮、复位按钮和当前位置显示。自动定位画面位置号选择下拉框、启动定位按钮、停止按钮、定位完成指示灯下方是位置表显示每个位置点的目标值和速度还可以在表格里直接修改数值并写入PLC数据块。参数设置画面加减速时间、速度上限、跟随误差容差等参数的修改界面调试时非常有用。报警画面显示PLC和V90返回的报警代码及文本并带有确认按钮。画面之间的切换用导航按钮HMI内部自带按钮翻页功能。这里一个小建议画面切换按钮建议做成全局对象按钮下面加全局触点这样在多个画面里放的时候只改一次属性就行不用每个画面单独做一个一模一样的按钮结构。HMI变量如何跟PLC数据块对应在HMI变量表里面直接用访问路径指向PLC的DB变量。博途里比较新的版本支持从PLC变量表拖拽生成HMI变量非常省事。但要注意HMI读取PLC的DB变量时必须是非优化或优化兼容方式。S7-1200的DB默认是优化的而旧版本HMI可能读不到优化DB的符号地址。解决办法是每个需要用HMI访问的DB在属性里把优化的块访问取消勾选这样HMI能通过绝对地址访问。4. 常见问题与排查技巧实录4.1 PROFINET通讯时断时续现象V90偶尔通讯中断但过几秒自己恢复PLC报警提示IO设备故障。排查步骤先看交换机是否有问题。便宜的非工业交换机在某些电磁干扰大的环境里不稳定建议直接用西门子CSM1277或更好的工业交换机。检查网线水晶头是不是线序错了或者屏蔽层没接好。PROFINET要求至少用工业以太网电缆最好带屏蔽压接时屏蔽层要可靠接地。看V90和PLC的IP地址有没有冲突。如果手动设置了固定IP检查交换机上有没有别的设备占用同一IP。检查PROFINET网络里的“设备名称”是否唯一。V90驱动器如果之前被别的项目配置过设备名可能造成冲突恢复出厂设置重新配置即可。还有一个不太容易想到的原因PLC固件和驱动器的GSD版本兼容性。如果PLC固件太老而V90的GSD文件太新可能频繁丢站。这时候可以把PLC固件升级到较新版本前提是硬件支持或者在博途里降低PROFINET的“缩短更新时间”设置使其更稳定。4.2 伺服使能后不动作现象程序里MC_Power已经输出TRUE状态显示无故障但点动也没有反应。这种问题最常见的原因V90的通讯模式没有选对。驱动器面板上如果显示OFF2或OFF3状态表示未准备好或急停激活。检查是否有外部急停信号接到了驱动器的安全输入或者驱动器内部的安全功能被触发。MC_Power的Enable虽然为TRUE但速度给定为0而且方向信号没有使能。标准报文里控制字1包含正/负方向使能位有的程序里没注意把这两个位置1导致轴方向被禁止。工艺对象里的驱动未选择“实际值”。在轴组态里的驱动选择中如果没有勾选启用实际值检测轴会一直处在未同步状态所有运动控制指令不会执行。排查时用博途的在线表功能把驱动器的“控制字1”每个位都标出来看跟正常的控制字值比对很快就能定位问题。4.3 回零后位置总是差一点点现象每次回零完成轴的显示位置可以回到0但如果把轴移动到一个固定机械位置显示值跟上次对不上。原因基本出在这几个方面参考点开关安装位置附近的机械间隙导致每次触发行程有细微差异。回零速度太高开关响应慢了几毫秒而电机转速高几毫秒的延迟对应的位移较大。编码器零点与参考点开关之间的相位关系不稳定。解决方法是把回零速度降低到50~100转/分钟并检查参考点开关的信号是否干净。如果对重复精度要求高比如定位精度0.01mm可以考虑用绝对值编码器配合电池或者使用V90的“通过PROFINET报文命令直接回零到设定值”方式从机械挡块位置直接偏置计算。4.4 触摸屏修改参数后无法写入PLC现象在HMI上改位置表数值输入确认后PLC里的数据块没有变化。原因通常只有一个数据块被设置为优化访问导致HMI无法直接写入。解决办法在博途里选中数据块属性里取消优化的块访问选项重新编译下载。检查HMI变量的访问路径是否正确如果使用绝对地址如%DB1.DBW0要注意数据类型对齐。还要注意触摸屏和PLC的完全访问连接机制设置前面提过。还有一个点如果PLC程序里有OB里对同一个DB变量做了写操作比如在每个扫描周期把某个值覆盖成0而HMI写进去的值马上被程序覆盖了看起来就是写不进去。这种问题需要用交叉引用查一下各个块对这个变量的读写情况。4.5 常见故障速查表现象可能原因处理方向PROFINET不通V90面板显示BUS红灯设备名/IP冲突、网线问题检查硬件连接恢复V90出厂设置后重配轴使能后抖动/啸叫增益太高或惯量比过大V-Assistant自动优化或手动降增益定位完成后有拖尾/过冲减速时间太短、到位容差太小增大减速时间放宽到位容差垂直轴断电下滑抱闸参数未配置设置抱闸输出和延时参数HMI画面数值刷新慢采集周期太短/HMI与PLC通讯负荷大调整采集周期设计PLC里报警提示Fault1V90报过流/过压查V90面板故障代码对应说明书5. 模板扩展方向与个人实操心得这套模板做出来之后我已经在两个项目上用过。第一个是简单的单轴推料机构第二个是双轴联动的小型装配设备。换设备时我做的主要改动是复制一份轴工艺对象改名为Axis2重新关联到第二个V90驱动器的PROFINET设备然后复制FB调用两次给第二个轴分配独立的DB实例。修改驱动器的设备名称确保v90_axis1和v90_axis2不冲突。调整位置表里每个位置点的数值和速度。整个过程不需要重写逻辑耗时基本在半天以内。这也是我坚持把程序模块化、把所有参数放进DB的原因。最后分享一个在实际调试时很实用的小技巧在DB里留一个调试模式开关当它为TRUE时程序会忽略HMI参数强制使用DB里的默认调试参数低速、小加减速。这样在现场试跑时不用小心翼翼改HMI参数保证安全等调试好了再把开关关掉用HMI参数正式运行。这个机制帮我避免了好几次因为参数输入错误导致的设备撞机。另一个心得是关于程序版本管理的。西门子博途项目文件比较大每次修改前我习惯复制一份带日期的备份哪怕只是改了HMI上的一个按钮位置。现场调试时间长了手头有好几个版本的备份出问题时能很快回退不至于从头再查。如果你正准备上这套方案建议先把V90驱动器的V-Assistant调试软件和博途版本的兼容性确认好硬件连接顺序搞清楚再逐步推进组态和接线。只要硬件没问题、参数对应得上这套S7-1200V90总线控制的方案跑起来是相当稳的。等模板里的逻辑跑顺之后你手头就等于积累了一套可以反复用的标准程序后续再做类似项目会轻松很多。