UG NX与PLC-1500在环虚拟测试:机电联调全流程指南
1. 为什么我会把UG NX和PLC-1500放在一起做在环测试干这行久了你会发现一个挺尴尬的现象机械设计那边用UG NX把三维模型画得漂漂亮亮电气那边用TIA Portal把PLC程序写得逻辑严密但两边真正坐在一起讨论问题往往要等到设备已经在车间里立起来、气路电路都接好了才发生。这时候如果程序有个低级错误或者机械动作顺序和电气逻辑对不上改起来就是拆了装、装了拆时间和钱都是真金白银。我这两年越来越习惯在一开始就做一件事在电脑里把机械模型和PLC程序先联调一遍也就是标题里说的UG NX与PLC-1500的在环虚拟测试。这里说的PLC-1500就是西门子的S7-1500系列PLC只是大家口语里经常这么叫。所谓在环就是把PLC的程序逻辑和NX里的机电模型跑在一个闭环环境里PLC输出的信号去驱动模型运动模型里的传感器反馈再回到PLC程序里形成完整的控制回路。这项技术适合谁说实话覆盖面挺广。做非标自动化设备、装配线、物流分拣线的机械工程师写伺服电机和气缸控制逻辑的电气工程师做数字化工厂规划的人甚至高校里带学生做机电一体化课程设计的老师都能从这里省出大量时间。这套方法的核心价值一句话就能说清把原本在现实设备上才能发现的逻辑错误、干涉问题和时序冲突提前到图纸还没出厂的阶段解决掉。1.2 在环测试的层级别搞混了圈子里常说的在环测试其实分好几档很多人一上来就混为一谈导致方案的预期和结果对不上。MILModel in the Loop模型在环控制逻辑是纯数学模型机械部分也是数学模型比如用Simulink做仿真。它的优点是跑得快、改起来方便但和实际代码、实际硬件的差距很大。SILSoftware in the Loop软件在环PLC程序编译出来的机器码跑在PC上机械部分仍由仿真模型承担。这个层级的好处是电气工程师在电脑上就能验证逻辑本身是通还是断。HILHardware in the Loop硬件在环使用真实的PLC硬件接上仿真环境模拟的传感器和负载。这种级别最接近实际工况但需要一台真实PLC而且接线、配置都更费工夫。UG NX与PLC-1500的在环虚拟测试严格来讲是介于SIL和HIL之间的方案。PLC程序跑在PLCSIM Advanced这个虚拟PLC环境里不占用真实硬件而机械部分则完全由NX MCDMechatronics Concept Designer机电概念设计模块提供。它既有SIL的轻量又比纯软件仿真的可置信度高——因为NX MCD的动力学解算和碰撞检测是非常接近真实物理情况的。1.3 这个组合的实际价值一次真实案例的启示去年我帮朋友调试一条小型装配线的程序。按照传统流程机械装配完成后电气进场光是在现场来回改传感器位置和程序逻辑就用了一周多。后来第二个项目我们提前在NX里搭了整线的简化模型包括几个滑台、气缸和传送带PLC程序直接通过PLCSIM Advanced连上模型跑。结果有个气动顶升的顺序逻辑问题在虚拟测试里就暴露出气缸还没缩回就启动平移的冲突当场在办公室里就改了程序。后来设备进场电气调试只用了大半天基本是一次通过。这就是在环虚拟测试最实在的价值**把调试时间从车间搬回办公室把试错成本从物理世界搬到数字世界。**下面我把整个链路拆开讲从环境搭建到联调踩坑把我这几年的经验一次说透。2. 环境搭建与版本匹配第一道真正的门槛很多人在这一步就被卡住了不是因为难度大而是因为**西门子和西门子自家的软件版本兼容性有时候也相当拧巴。**先把你需要的东西列全再讲我在版本匹配上踩过的坑。2.1 软件清单做这套在环虚拟测试你至少需要以下三套软件软件作用备注UG NX含MCD模块建立三维模型、刚体、运动副、信号适配器NX的机电概念设计模块不是每个许可证都包含需要确认授权TIA Portal博途编写S7-1500的PLC程序、组态硬件也就是常说的Step 7 ProfessionalPLCSIM Advanced在PC上创建虚拟PLC实例直接运行编译后的PLC程序注意不是普通版PLCSIM也不是PLCSIM S7-PLCSIM必须用Advanced版另外建议装一个Excel或WPS后面批量配置信号映射时用来整理IO表特别方便。2.2 版本匹配关系重点这步很容易踩坑。NX MCD、TIA版本、PLCSIM Advanced三者之间不是随便配的。我整理了一个大致参考表具体安装前务必查阅各软件安装包自带的Release Notes确认NX版本系列TIA版本参考PLCSIM Advanced参考NX 1899 / 1926TIA V15.1 / V16PLCSIM Advanced V3.0 / V4.0NX 1953 / 1980 / 2007TIA V16 / V17PLCSIM Advanced V4.0NX 2206 / 2212TIA V17 / V18PLCSIM Advanced V5.0NX 2306 / 2312 及以上TIA V18 / V19PLCSIM Advanced V5.0 / V6.0我印象最深的一次是用了NX 1980配TIA V15.1结果在MCD里做外部信号映射时始终找不到PLCSIM Advanced的实例。查了半天才发现是PLCSIM Advanced V3.0对NX 1980的适配做得不够好后来升级到TIA V16和PLCSIM Advanced V4.0才解决。所以这套组合里PLCSIM Advanced的版本往往是最关键的卡点优先保证它和TIA的版本兼容再考虑NX的版本。2.3 网络与虚拟网卡准备PLCSIM Advanced运行时会创建一个虚拟的以太网适配器你可以把它理解成给PC装了一个虚拟出来的网口S7-1500的IP协议栈就跑在这个虚拟网卡上。TIA编译完成后程序会通过这个虚拟网卡下载到虚拟PLC中。需要注意两点建议提前在Windows的设备管理器里确认一下是否生成了名为PLCSIM Virtual Ethernet Adapter的网卡。如果没有说明PLCSIM Advanced安装有问题需要修复安装。虚拟网卡的IP地址要规划好。大部分场景下我会手动分配一个独立网段比如192.168.10.1子网掩码255.255.255.0避免和公司办公网、WiFi网段冲突。别小看这一步很多MCD连不上PLCSIM的案例罪魁祸首就是IP段冲突或者虚拟网卡被系统禁用了。2.4 安装顺序和授权注意事项我一般推荐这个顺序先装NX再装TIA Portal最后装PLCSIM Advanced。原因倒不是因为有什么严格的依赖关系而是PLCSIM Advanced的安装配置有时会重置网络环境放在最后装最省心。另外一个容易忽略的点**PLCSIM Advanced的许可证类型。**它支持按时间计量的试用授权和正式授权授权过期后虚拟PLC实例会无法启动错误提示有时候还特别隐晦。所以开工前先检查一下授权工具的许可状态别做到一半发现工具罢工了。3. NX MCD机电模型搭建让机械结构变成可执行对象在UG NX里做机电模型不是把三维图装进去就完事。**NX MCD要的是能动的对象不是能看的模型。**这里有几条核心原则和操作细节我分开讲。3.1 几何体简化先跑通再精细建模的第一原则是能简化就简化不要试图把每一个螺丝、每一个倒角都带进虚拟测试。倒角、圆角、螺纹这些细节对动力学解算没有任何帮助反而会大幅增加计算量。我的习惯是直接用NX里的简化体命令把模型的形状精简成方块、圆柱、平板等基本体。保留必要的轮廓尺寸和重心位置就够了因为MCD里的刚体质量、惯性矩都可以后期手动指定或自动计算。比如一个带导轨的滑台实际结构可能很复杂但在MCD里我一般用一个长方体代表滑台的运动部分一个固定底座代表静止部分中间加一个滑动副就可以了。如果你非要保留丝杠、导轨滑块的所有零件仿真速度会明显下降而且运动学约束有时候反而会出现奇怪的问题。3.2 刚体与运动副创建运动副之前必须先把参与运动的几何体定义为刚体Rigid Body。在NX MCD的命令里选中几何体指定质量和惯性矩它就从一个普通三维体变成了具备物理属性的刚体对象。运动副的选择直接决定机构的运动方式旋转副Hinge Joint绕一个固定轴旋转适合转台、折叠臂、门开合等场景。滑动副Slider Joint沿固定方向平移适合滑台、气缸活塞、升降台。圆柱副Cylindrical Joint允许绕轴旋转同时沿轴滑动适合气缸活塞杆这类既要伸出又要微转的机构。球铰副Spherical Joint允许三个方向旋转适合机械臂腕部等场景。在定义运动副时还要注意设置碰撞体Collision Body。碰撞体不是必须的但它决定了物体之间会不会互相阻挡。比如滑台走到导轨尽头要停住你就必须在挡块位置设置碰撞体否则滑台会直接穿过去。3.3 信号适配器模型和PLC之间的翻译官这是整个NX MCD里最核心的概念。**信号Signal是PLC和模型之间的沟通语言。**MCD通过定义输入信号和输出信号在外面暴露出一组可供PLC读写的接口。以气缸为例MCD输出给PLC的信号气缸是否伸出到位、是否缩回到位、活塞当前位置。MCD输入PLC给模型的信号控制气缸伸出、控制气缸缩回。在NX MCD里创建信号的路径是运行时行为相关的命令面板找到信号并添加输入/输出信号。我强烈建议从一开始就建立一套命名规范比如信号方向命名规则示例输入信号PLC→模型动词_对象_动作Push_Cylinder, Move_Slide_Forward输出信号模型→PLC对象_状态Slide_At_Right, Cylinder_Extended命名规范这个事儿一开始嫌麻烦等你处理上百个IO点的时候就知道有多省事了。名字乱的话信号映射时手动找都要找老半天。3.4 外部信号映射把MCD信号绑定到PLC变量模型里的信号建好之后需要把它们映射到PLC程序里的变量。操作路径在NX MCD里的外部信号映射功能可以选择PLCSIM Advanced作为目标。映射的关键是建立信号名与PLC变量地址/名称的对应关系。如果两边都用了一致的命名映射时可以自动匹配如果名字对不上就要手动一个一个拖。在映射时特别要注意信号的数据类型和长度。MCD里的Bool型信号对应PLC的Bool变量Real型对应Real变量Integer对应Int或DInt。类型不匹配轻则数值截断重则映射失败直接断线。另外字节序大端/小端在PLC中默认是大端传输这在MCD连接大多数S7设备时是天然兼容的但如果中间有第三方转换层就需要额外关注。3.5 建模时另一个容易被忽略的仿真步长NX MCD里的仿真默认是按时间步长推进的。步长越短结果越精细但计算量越大。我一般先按默认值跑通整个逻辑再去调整步长观察细节动作。如果需要做高速运动机构比如凸轮、飞剪的时序分析再专门把步长缩短同时配合MCD的数据记录工具抓取运动曲线。4. PLC-1500虚拟PLC侧配置从TIA到PLCSIM Advanced模型这边准备好了接下来是PLC侧。这一步的关键词是让编译后的PLC程序真正跑在一个虚拟CPU上。4.1 创建PLC项目和程序在TIA Portal里新建项目组态一台S7-1500 PLC。注意这里的关键在于硬件的固件版本Firmware Version要和PLCSIM Advanced支持的版本匹配否则后面下载程序时会报错。比如PLCSIM Advanced V4.0对S7-1500固件版本有限制你在TIA里组态时如果选择了过新的固件虚拟PLC可能无法识别。解决办法是查一下PLCSIM Advanced版本对应的固件支持范围在组态时选择兼容的固件版本。程序逻辑按正常方式编写不需要特殊处理。以我上一个项目为例我写了一个最简单的电机正反转控制程序I0.0正转启动按钮I0.1反转启动按钮Q0.0电机正转接触器Q0.1电机反转接触器I0.2正转限位开关I0.3反转限位开关这个程序本身没什么特别重点是这些IO地址要和NX MCD里映射的信号对应上。你在TIA里分配了多少IO点MCD的模型就要准备好相应数量的信号接口。4.2 PLCSIM Advanced实例创建启动PLCSIM Advanced你会看到一个管理虚拟PLC实例的界面。操作的要点是创建一个新实例选择的PLC类型必须和TIA里组态的一致比如CPU 1511-1 PN。为实例分配IP地址例如192.168.10.10。启动实例。成功后它会显示为一个绿色状态你可以把它理解成一台已经通电待命的虚拟PLC。顺便说一句PLCSIM Advanced支持同时运行多个实例这在做多PLC联动仿真时非常有用。我可以同时启动一台S7-1500和一台S7-300仿真让它们通过真实的S7通信指令互相交互效果和现场两台PLC通过以太网通信几乎一样。4.3 程序下载到虚拟PLC在TIA Portal里点击下载选择目标类型为PLCSIM接口选择PLCSIM Advanced提供的虚拟网卡对应的访问点就能把程序下载到虚拟PLC里。下载过程可能遇到的坑是访问点名称不对。TIA的PG/PC接口设置里必须选择PLCSIM Advanced或Siemens PLCSIM Virtual Ethernet Adapter作为访问点。如果你电脑上装过真实网卡驱动TIA有时候会倾向于选择真实网卡导致下载失败。解决办法是在TIA的下载对话框里手动强制指定访问点。下载完成后虚拟PLC会进入运行或停止状态你可以手动把它切到RUN。到这里一台跑着真实PLC程序的虚拟控制器就算备妥了。4.4 PLC侧的在线监控一个有价值的技巧是虚拟PLC同样支持TIA的在线监控和梯形图调试功能。你可以在TIA里打开梯形图一边看着PLC程序的输入输出状态一边看着NX MCD里模型的运动情况。这种程序状态机械动作同屏对照的体验现场调试时反而不容易实现。我调试时经常把TIA的编程窗口和NX的MCD窗口并排放PLC程序里某个位变成1NX模型里相应的气缸马上动作非常直观。这也是在环虚拟测试相比纯软件仿真最爽的地方。5. 从启动仿真到联动调试一次完整的流程环境有了模型有了程序有了接下来就是让它们跑起来。这一步是整套链路中成就感最强、也是各种问题集中爆发的阶段。5.1 正确的启动顺序重要我不止一次看到有人在论坛上问为什么MCD连不上PLCSIM结果一问顺序反了。稳妥的启动顺序是启动PLCSIM Advanced创建并启动虚拟PLC实例。确认虚拟PLC状态为RUN。在TIA Portal里把程序下载到虚拟PLC并触发RUN。打开NX MCD文件进入外部信号映射界面确认映射状态为已连接。在MCD里启动仿真模式观察模型状态。为什么这个顺序很关键因为NX MCD在启动仿真时会去主动连接PLCSIM Advanced的实例。如果PLCSIM侧还没就绪MCD的连接请求就会失败之后即使PLCSIM启动正常了MCD也不会自动重连必须你手动刷新或重新映射一次。5.2 判定联调成功的标准如何确认整个链路确实通了我的判断标准是信号方向正确PLC里给一个输出置位MCD模型里相应的机构开始运动不是反向的。反馈准确模型里某个传感器信号被触发PLC程序里对应的输入位变化为1。时序正确比如气缸先完全伸出触发到位信号PLC才允许下一步动作这个先后顺序不能乱。异常处理生效按下模型的急停信号PLC程序能够立刻进入安全停车分支。前三条都好理解第四条往往在真实设备调试时才会重视但在虚拟测试里你有最好的机会去验证急停、超时报警、互锁逻辑等安全功能。别偷懒这些功能必须在虚拟阶段就完整验证一遍。5.3 一个直线滑台案例走查拿我上面提到的直线滑台举例整个过程是这样的我按下TIA里的仿真按钮或者在模型上做一个虚拟按钮PLC程序置位Q0.0正转输出为1。这个状态通过PLCSIM Advanced的通信层传到NX MCD的外部信号映射里MCD识别到Move_Slide_Forward输入信号为真。滑台的运动副收到一个正向驱动力开始在滑动副上向右移动。当滑台到达右端时碰撞体在一个限位传感器的位置触发MCD把Slide_At_Right输出信号置为1。PLC程序收到I0.2为1把Q0.0复位同时如果后续逻辑有下一步指令就继续执行。这条链路看一眼就能明白和真实设备的逻辑是完全一致的唯一的区别就是电机换成了虚拟驱动力、传感器换成了碰撞体触发、导线换成了TCP/IP信号。5.4 数据记录与回归测试虚拟测试一个特别大的优势是结果可记录、可对比、可回归。NX MCD支持把仿真过程中的运动曲线、速度曲线导出PLCSIM Advanced也支持变量记录的导出。我一般会把每个测试用例的运行结果保存下来等程序改了一版之后再用同一组测试用例跑一遍看看有没有哪里逻辑退化了。这种回归测试能力在现场调试中属于奢侈品一台设备动起来之后很难再回到初始状态重新跑一遍但在虚拟测试里只要按一下复位模型回到初始位置PLC程序重新执行几分钟就能跑完一轮完整测试。这也是后面第七节要讲的自动化的基础。6. 联调翻车现场我把容易踩的坑都列出来做虚拟调试这两年我总结了几类高频问题。这些问题单独看都不难但排查起来往往特别费时间我按实际排查链路写出来希望能帮你少走弯路。6.1 现象一信号映射一直是红色断线这是最常见的问题。在NX MCD的外部信号映射界面里状态列一直显示红色或者干脆找不到PLCSIM Advanced实例。我的排查顺序是PLCSIM Advanced实例是否真正运行。有些人把实例创建了但没启动看起来有其实连不上。虚拟网卡是否被禁用。Windows更新有时候会重置网络适配器把PLCSIM Virtual Ethernet Adapter给禁掉去设备管理器里检查一下。IP是否相通。用命令行ping一下PLCSIM虚拟网卡的IP地址比如192.168.10.10不通就检查虚拟网卡的IP设置。防火墙拦截。Windows Defender防火墙有时候会拦截PLCSIM Advanced的通信端口暂时关闭防火墙测试如果能连上就添加相应的放行规则。NX MCD内部连接管理器是否刷新。有些情况下手动刷新一次外部信号映射连接即可。6.2 现象二PLC输出置位了模型纹丝不动PLC程序里看状态Q0.0已经置1了但NX模型里的电机就是不转。这个问题十有八九是信号映射配置出了问题。排查步骤检查MCD输入信号是否真的收到了PLC的置位值。可以在MCD的信号监控面板里看这个信号的值如果还是False说明链路在中间断了。检查映射关系是否搞反了方向。输入输出方向反了PLC输出信号进了MCD的输出端口模型当然不会反应。检查运动副的驱动方式。如果MCD运动副定义的驱动源是速度但PLC发送的是位置指令模型可能会忽略这个输入。要确保PLC发送的数据类型和运动副接受的驱动参数类型一致。6.3 现象三仿真一开始CPU就跑满模型一顿一顿这是性能问题常见于模型复杂度过高或通讯步长设置不合理。我的处理办法把MCD模型的碰撞体数量降下来。碰撞检测是最消耗计算资源的部分能删就把不必要的碰撞体删掉。缩短仿真步长不一定能解决问题反而会增加计算量。先把步长调大跑通逻辑再说。检查数据记录功能。MCD里如果开了大量信号的数据记录每个仿真步都要写盘会很拖速度。测试阶段就把数据记录关掉等需要分析时再开。6.4 现象四换了一台电脑就各种连不上虚拟测试项目经常要在台式机和笔记本之间移动换环境后最容易出问题的是授权问题和版本不匹配。PLCSIM Advanced的授权是绑定电脑的换机器后要重新激活另外目标机器上的TIA版本、PLCSIM Advanced版本必须和原机器一致否则项目文件能打开但虚拟PLC可能拒绝运行。所以我建议在项目启动前就把所有参与虚拟测试的机器统一软件基线包括NX、TIA、PLCSIM Advanced的版本、服务包、甚至操作系统版本全部记录在项目文档里。别小看这件事比任何调试经验都省时间。7. 用NX二次开发把虚拟测试自动化做到这一步说明你已经能手工跑通整个在环虚拟测试流程了。但对于真正的项目交付手动流程还是太慢。一个大型设备可能有几百个IO信号、几十个运动副手动建模型、手动映射、手动测试效率和出错率都会成为瓶颈。7.1 为什么必须走向自动化我做过一个项目设备不算大但IO点有三百多个。如果全部手动在NX MCD里创建信号再手动映射没有半天搞不定。而用脚本批量生成整个过程压缩到十几分钟。NX二次开发NX Open支持C#、C和Python。对于虚拟测试自动化我强烈推荐用Python原因是上手快、代码量少而且和MCD的API配合得不错。你可以在NX的执行菜单里直接运行脚本。7.2 批量创建刚体和信号举一个最简单的例子。假设你的装配体里所有需要变成刚体的零件名都以RB_开头你可以用一段Python脚本批量处理import NXOpen import NXOpen.Mechatronics session NXOpen.Session.GetSession() work_part session.Parts.Work mcd work_part.MechatronicsManager for body in work_part.Bodies: if body.Name and body.Name.startswith(RB_): rb mcd.RigidBodyCollection.Create(body) rb.Name body.Name这只是最基础的一步。你可以继续扩展从Excel表格里读取信号清单自动创建MCD输入输出信号import csv with open(signal_list.csv, r) as f: reader csv.DictReader(f) for row in reader: name row[signal_name] direction row[direction] # Input or Output data_type row[data_type] # Bool, Real, Int if direction Input: signal mcd.SignalCollection.CreateInputSignal(data_type) signal.Name name else: signal mcd.SignalCollection.CreateOutputSignal(data_type) signal.Name name信号模板批量创建之后你可以在MCD里手动把它们和几何体、运动副关联起来。虽然这一步目前还需要一定的人工介入但已经把最耗时的重复劳动大幅压缩了。7.3 自动映射与回归测试再进一步你可以用脚本直接操作外部信号映射把MCD信号和PLCSIM Advanced变量一一绑定。这需要用到NX Open里和外部信号映射相关的API核心思路是遍历信号列表逐个指定目标PLC变量名和地址。前阵子圈子里在讨论NX与MCP这类更开放的控制接口方案本质上是想让NX的模型信息和外部控制/调度系统更自由地融合。我没有把这条路完全走通但方向是明确的**通过二次开发把NX MCD的IO通道抽象成标准接口让不同的控制器虚拟PLC、真实PLC、甚至外部调度系统都能用一致的方式接入。**就算暂时不做那么深的集成只把脚本做成一键建立映射、一键启动仿真、一键恢复初始状态就已经能为回归测试省下大量时间了。7.4 自动化回归测试的执行方式一个简单的自动化回归测试流程我的做法是提前准备多组输入信号表每组对应一个测试场景比如正常流程、急停、堵料。写一个Python脚本按顺序加载每组信号驱动PLCSIM Advanced里对应的PLC变量置位。在NX MCD里启动仿真运行固定时长后记录模型的最终状态和PLC的输出状态。把记录结果和期望结果比对输出测试报告。整个过程不需要人盯着屏幕跑完一批测试用例直接看报告。对于需要出正式项目文档的交付场景这比手动截屏记录要专业得多。回到最开始的问题为什么费这么大劲把UG NX和PLC-1500拉在一起做在环虚拟测试我个人的体会是它不只是一个软件操作技巧更是一种把调试环节前置的思维方式。机械和电气不再各自闷头干活而是通过这套数字链路在设计阶段就互相咬合、互相验证。第一次跑通整套流程的时候可能觉得繁琐但一旦形成模板后续每个项目都会越用越顺手——尤其在那些改了一遍又一遍的程序版本之间虚拟测试给了我们从容试错的底气。