
1. 为什么要在仿真环境里打通MCGS和PLCSIM Advanced做过自动化项目的朋友都知道一套完整的控制系统在落地之前最理想的验证方式就是在纯软件环境里把逻辑跑通、把画面联调好确认没问题了再去现场接线调试。但现实往往很骨感——PLC硬件还没到货、触摸屏还在采购流程里、现场设备根本没条件让你反复试错。这时候如果能把PLC仿真器和触摸屏组态软件连起来就等于在电脑里搭了一套“虚拟产线”逻辑对不对、画面跳转顺不顺、数据交互有没有问题全都能提前暴露出来。MCGSMonitor and Control Generated System是国内工控圈用得非常多的一款组态软件尤其是昆仑通态的TPC系列触摸屏在中小型自动化项目里出镜率极高。而西门子的PLCSIM Advanced是S7-1200/1500系列PLC的高级仿真工具它比早期的PLCSIM强在哪儿核心就一点支持以太网通信仿真。普通的PLCSIM只能做内部逻辑仿真外部设备根本连不上它PLCSIM Advanced则虚拟出了一张网卡能像真实PLC一样响应网络请求这就为MCGS这类第三方组态软件连接仿真PLC提供了物理层面的可能性。这套方案解决的核心问题是在没有实体PLC和实体触摸屏的情况下完成MCGS画面与S7-1200/1500程序的联合调试。适合谁一是正在学习西门子PLC和MCGS组态的在校学生二是手头没有硬件但需要验证项目逻辑的工程师三是想从S7-200 SMART迁移到1200/1500平台、顺便把触摸屏通信也摸一遍的老手。整个流程涉及TIA博图的硬件组态、PLCSIM Advanced的虚拟实例启动、MCGS的设备驱动配置、以及最关键的IP地址和通信端口匹配。下面我把整个流程拆开揉碎一步步说清楚。2. 整体方案设计与核心思路拆解2.1 为什么选PLCSIM Advanced而不是普通PLCSIM普通PLCSIM走的是西门子内部的虚拟通信接口它跟TIA博图的仿真PLC之间是“私密通道”外部程序想接进来基本没门。PLCSIM Advanced则不同它提供了三种通信模式Softbus、TCP/IP、PLCSIM Virtual Eth. Adapter。其中PLCSIM Virtual Eth. Adapter模式会在Windows系统里虚拟出一张网卡这张网卡有独立的IP地址仿真PLC就挂在这张网卡上任何支持标准S7通信或Modbus TCP的第三方软件都能通过这张虚拟网卡跟仿真PLC通信。MCGS这边昆仑通态的驱动库里自带“西门子S7-1200/1500”以太网驱动底层走的是S7通信协议。只要IP地址和机架槽号对得上MCGS就能像连真实PLC一样连上PLCSIM Advanced的虚拟实例。这就是整个方案的底层逻辑用虚拟网卡打通通信链路让MCGS以为自己在跟一台真实的S7-1200说话。2.2 版本匹配的坑不是随便装两个软件就能连这里必须先泼一盆冷水。PLCSIM Advanced对TIA博图的版本有严格要求不是任意组合都能跑通。根据我的实测经验比较稳妥的搭配是TIA博图版本PLCSIM Advanced版本备注V15.1V2.0 SP1经典稳定组合V16V3.0推荐兼容性好V17V4.0需要较新系统V18V5.0最新组合功能最全MCGS这边建议用MCGS Pro 3.3.6及以上版本驱动库里对S7-1200/1500的支持比较完善。如果你用的是老版本的MCGS嵌入版7.7驱动可能只支持S7-200/300连1200会出问题。这一点在动手之前一定要确认清楚否则后面调半天通信连不上回头发现是驱动不支持那才叫冤枉。2.3 通信链路的数据流向整个系统的数据流向是这样的MCGS画面上的按钮或输入框产生操作信号通过S7通信协议打包成以太网帧发往PLCSIM Advanced虚拟网卡的IP地址PLCSIM Advanced收到请求后把数据映射到仿真PLC的对应DB块或M区PLC程序执行逻辑运算后把结果写回DB块MCGS再通过读取操作把数据取回来刷新到画面上。理解了这个流向后面配置的时候就知道每一步在干什么。比如为什么要在TIA博图里把DB块设置为“非优化访问”因为优化访问的DB块没有固定的绝对地址MCGS这种第三方软件没法按偏移量去读写。再比如为什么PLCSIM Advanced要选Virtual Eth. Adapter模式因为只有这个模式才会在系统里生成一张真实的虚拟网卡MCGS才能通过IP地址找到它。3. TIA博图侧配置全流程3.1 新建项目与PLC硬件组态打开TIA博图新建一个项目添加一个S7-1200 CPU。具体型号选什么如果你只是做仿真验证选CPU 1214C DC/DC/DC就够了这个型号在PLCSIM Advanced里支持得最好。添加完CPU之后双击“设备与网络”进入设备视图确认一下CPU的以太网接口已经分配了IP地址。这个IP地址在仿真环境下不会真正生效但TIA博图内部需要它来做通信组态随便填一个跟虚拟网卡同网段的地址就行比如192.168.0.1。接下来是关键一步在CPU属性里找到“保护”选项卡勾选“允许从远程伙伴使用PUT/GET通信访问”。这个选项默认是不勾的如果不勾MCGS的S7通信请求会被PLC直接拒绝现象就是MCGS显示“通信超时”或“连接被拒绝”。很多人卡在这一步以为是IP配错了其实是这个访问权限没开。3.2 建立DB块并设置非优化访问在程序块里新建一个全局DB块比如命名为“DB_MCGS”。双击打开在属性里找到“属性”选项卡把“优化的块访问”前面的勾去掉。这一步至关重要因为MCGS需要按绝对地址访问DB块优化访问的DB块地址是符号化的第三方软件读不了。去掉优化访问之后编译一下DB块就能看到每个变量的偏移量了。比如你定义了一个数组Data[0..9]类型是Real那么Data[0]的偏移量就是0.0Data[1]是4.0以此类推。这些偏移量就是MCGS里配置连接变量时要填的地址。注意DB块的编号也要记下来比如DB1、DB2MCGS里填地址的时候需要用到。建议把DB块编号和变量偏移量整理成一张表后面配置MCGS的时候直接对着填不容易出错。3.3 编写测试程序为了验证通信是否成功写一段简单的测试程序。比如用一个定时器让一个整数变量每秒加一或者用M区的几个位来做按钮的启停控制。我一般习惯在OB1里写这样的逻辑// 每秒计数一次 DB_MCGS.Counter : DB_MCGS.Counter 1; // 按钮控制电机启停 IF DB_MCGS.StartBtn THEN DB_MCGS.MotorRun : TRUE; END_IF; IF DB_MCGS.StopBtn THEN DB_MCGS.MotorRun : FALSE; END_IF;这段程序的作用是MCGS画面上按“启动”按钮PLC的MotorRun置位按“停止”按钮MotorRun复位。同时Counter变量每秒自增用来验证数据刷新是否正常。程序写完后编译整个项目确保没有错误。3.4 启动PLCSIM Advanced虚拟实例打开PLCSIM Advanced在界面里选择“PLCSIM Virtual Eth. Adapter”模式。然后设置虚拟网卡的IP地址这个地址要跟TIA博图里CPU的IP地址在同一网段但不要冲突。比如TIA里CPU设的是192.168.0.1虚拟网卡就可以设192.168.0.100。子网掩码统一用255.255.255.0。设置好之后点击“Start”启动虚拟实例。这时候Windows的网络适配器列表里会多出一张虚拟网卡状态是“已连接”。如果显示“未连接”或“网络电缆被拔出”说明虚拟网卡驱动没装好需要重新安装PLCSIM Advanced的驱动组件。虚拟实例启动后回到TIA博图点击“下载到设备”目标接口选择虚拟网卡对应的那个网段就能把程序下载到仿真PLC里。下载完成后TIA博图会显示“在线”说明仿真PLC已经在运行了。4. MCGS侧配置与通信调试4.1 新建MCGS工程与设备组态打开MCGS Pro新建一个工程选择对应的触摸屏型号。如果你用的是TPC1061Ti这类常见型号直接选就行如果只是做仿真验证随便选一个分辨率匹配的型号也可以因为仿真环境下触摸屏型号不影响通信。进入“设备窗口”双击“设备工具箱”找到“西门子S7-1200/1500”以太网驱动添加到设备组态里。然后双击这个驱动进入属性设置。这里有几个关键参数IP地址填PLCSIM Advanced虚拟网卡的IP地址比如192.168.0.100端口号默认102不用改机架号S7-1200固定为0槽号S7-1200固定为1本地TSAP一般填03.00远程TSAP一般填03.01这些参数里机架号和槽号是最容易填错的。S7-300/400的机架号通常是0、槽号是2但S7-1200/1500的槽号是1。填错了就连不上现象是MCGS一直显示“正在连接”然后超时。4.2 建立连接变量与地址映射驱动添加好之后在“实时数据库”里新建几个变量比如Counter、StartBtn、StopBtn、MotorRun。然后在设备组态的“通道连接”里把这些变量跟PLC的地址对应起来。地址格式是这样的DB编号.偏移量。比如Counter变量对应DB1.DBD0StartBtn对应DB1.DBX4.0StopBtn对应DB1.DBX4.1MotorRun对应DB1.DBX4.2。注意数据类型要匹配Counter是整数用DBD0StartBtn是布尔量用DBX4.0。实操心得MCGS的地址格式跟西门子博图里的表示方法略有不同。博图里写DB1.DBD0MCGS里也写DB1.DBD0但有些版本的MCGS驱动要求写成DB1.DBW0或DB1.DBB0具体取决于数据类型。如果通信连上了但数据读不对先检查地址格式和数据类型是否匹配。4.3 画面组态与按钮绑定在用户窗口里新建一个画面放几个按钮和显示框。启动按钮绑定StartBtn变量操作属性设为“按下时置1松开时置0”停止按钮绑定StopBtn同样设置。Counter变量用一个标签显示设置成每秒刷新一次。MotorRun用一个指示灯显示0是灰色1是绿色。画面做好之后点击“下载”到MCGS模拟器。MCGS Pro自带模拟运行功能不需要真实触摸屏也能跑。下载完成后模拟器会自动启动显示你做的画面。4.4 通信调试与数据验证现在到了最关键的环节验证通信是否成功。在MCGS模拟器里按一下启动按钮观察PLC那边的MotorRun是否置位。如果MCGS画面上指示灯变绿了说明通信链路是通的。再看Counter变量如果数字在每秒递增说明数据读取也正常。如果通信失败按这个顺序排查检查PLCSIM Advanced虚拟网卡的IP地址是否跟MCGS里填的一致在Windows命令行里ping一下虚拟网卡的IP看能不能通检查TIA博图里CPU的“允许PUT/GET通信访问”是否勾选检查DB块是否去掉了优化访问检查机架号和槽号是否填对检查MCGS驱动版本是否支持S7-1200/1500这套排查流程我走过很多遍90%的问题都出在第3步和第4步。尤其是PUT/GET访问权限很多人根本不知道有这个选项通信连不上就以为是IP问题其实IP早就通了只是PLC拒绝了读写请求。5. 常见问题与排查技巧实录5.1 通信连接超时怎么办这是最常见的问题现象是MCGS一直显示“正在连接”然后报超时错误。排查思路分三层第一层是网络层确认虚拟网卡IP和MCGS里填的IP在同一网段用ping命令测试连通性第二层是协议层确认TIA博图里PUT/GET通信访问已开启DB块已去优化第三层是驱动层确认MCGS驱动版本支持S7-1200/1500机架槽号填写正确。如果ping通了但MCGS还是连不上大概率是PUT/GET权限没开。这个选项在CPU属性的“保护”选项卡里勾上之后需要重新编译下载才生效。5.2 数据读到了但数值不对通信连上了Counter也能读但数值跟PLC里实际的不一样。这种情况通常是数据类型或地址偏移量搞错了。比如PLC里Counter是DInt类型占4个字节MCGS里如果按Word类型读只能读到低16位数值就会不对。解决办法是在MCGS里把变量类型改成32位整数地址用DBD。还有一种情况是DB块的偏移量算错了。博图里编译DB块后可以看到每个变量的偏移量但如果你在DB块里插入了新变量后面的偏移量会全部变化。所以每次修改DB块结构后都要重新核对MCGS里的地址映射。5.3 PLCSIM Advanced启动失败有时候PLCSIM Advanced启动虚拟实例时会报错提示“无法创建虚拟网卡”或“实例启动失败”。这通常是Windows的Hyper-V或WSL占用了虚拟化资源导致PLCSIM Advanced的虚拟网卡驱动加载不了。解决办法是在Windows功能里关闭Hyper-V和WSL重启电脑后再试。如果必须用WSL可以考虑用VMware虚拟机来跑PLCSIM Advanced但这样网络配置会更复杂一些。5.4 MCGS模拟器画面不刷新MCGS模拟器启动了画面也显示了但按钮按下去没反应数据也不刷新。先检查MCGS的“设备调试”窗口看通信状态是否显示“正常”。如果显示“正常”但数据不刷新可能是变量的采集周期设得太长。在实时数据库里把变量的采集周期改成100ms或200ms刷新速度会明显改善。另外MCGS模拟器跟PLCSIM Advanced之间的通信是单向轮询的MCGS主动去读PLC的数据PLC不会主动推。所以如果PLC里的数据变化很快MCGS这边可能会有延迟这是正常现象不是通信故障。5.5 常见问题速查表现象可能原因解决方法通信超时PUT/GET权限未开CPU属性里勾选允许PUT/GET通信超时IP不在同一网段检查虚拟网卡和MCGS的IP设置数据读不到DB块优化访问未关DB块属性里去掉优化访问数据读到了但不对数据类型不匹配检查MCGS变量类型和地址格式虚拟实例启动失败Hyper-V占用虚拟化关闭Hyper-V后重启画面不刷新采集周期太长改为100-200ms按钮无反应变量绑定错误检查按钮的操作属性设置6. 进阶技巧与实战经验分享6.1 用脚本模拟真实设备响应仿真环境最大的好处是可以“作弊”。比如你想模拟一个温度传感器的信号不需要真的接传感器直接在PLC程序里写一段斜坡函数让温度值从25度慢慢升到100度MCGS画面上就能看到温度曲线在变化。这种模拟方式比接真实传感器还方便因为你可以精确控制变化速率和范围。再比如电机启停控制你可以在PLC程序里加一个延时模拟电机从启动到达到额定转速的过程MCGS画面上就能看到电流逐渐上升的动画效果。这些细节在真实设备上很难反复调试但在仿真环境里想怎么改就怎么改。6.2 多画面切换与报警记录MCGS支持多画面组态你可以做几个不同的画面比如主监控画面、参数设置画面、报警记录画面。在仿真环境下画面切换的响应速度跟真实触摸屏几乎一样可以用来验证画面逻辑是否合理。报警记录功能也可以提前测试比如在PLC里模拟一个超温报警看MCGS能不能正确弹出报警窗口并记录时间。6.3 数据归档与趋势曲线MCGS的数据归档功能可以把变量历史数据存到数据库里然后用趋势曲线控件显示出来。在仿真环境下你可以让PLC产生一段模拟数据比如正弦波或方波然后在MCGS里看趋势曲线是否平滑、采样间隔是否合理。这个功能在调试PID控制的时候特别有用因为你可以反复调整PID参数观察响应曲线的变化而不需要担心把真实设备搞坏。6.4 从仿真到实机的平滑过渡仿真验证通过之后把程序下载到真实PLC和触摸屏上通信配置基本不用改只需要把MCGS里的IP地址改成真实PLC的IP就行。DB块的地址映射也完全一致因为仿真和实机的程序是同一套。这就是这套方案最大的价值一次调试两边通用。不过有一点要注意真实PLC的IP地址和虚拟网卡的IP地址通常不在同一网段所以MCGS里要改IP。另外真实PLC的PUT/GET权限默认也是关闭的下载程序后记得在TIA博图里勾上。6.5 性能优化建议PLCSIM Advanced的仿真性能跟电脑配置关系很大。如果电脑内存小于16GB跑起来可能会卡顿尤其是同时开TIA博图、PLCSIM Advanced和MCGS模拟器的时候。建议把虚拟机的内存分配调大一些或者关掉不必要的后台程序。另外MCGS的采集周期不要设得太短100ms到200ms足够了设成10ms反而会增加通信负担导致数据刷新不稳定。我在实际使用中发现把PLCSIM Advanced的虚拟网卡设置为“专用网络”而不是“公用网络”通信稳定性会更好一些。Windows的防火墙有时候会拦截虚拟网卡的通信请求把网络类型改成专用之后防火墙规则会宽松一些。如果还是不行可以临时关闭防火墙测试一下确认是防火墙问题后再添加例外规则。最后再分享一个小技巧如果你经常做仿真调试可以把TIA博图项目、PLCSIM Advanced配置和MCGS工程打包成一个模板下次新建项目的时候直接复制一份改改就行省得每次都从头配置。尤其是DB块的地址映射表整理成Excel表格存好换项目的时候直接对照修改效率能提高不少。