ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

无硬件也能联调:S7-1200博途PLCSIM与MCGS纯仿真通信实战

无硬件也能联调:S7-1200博途PLCSIM与MCGS纯仿真通信实战 刚入坑西门子博途和昆仑通态MCGS的朋友大概率都撞过同一堵墙手头没有实体PLC或者设备还在路上但项目交付时间不等人画面要提前做逻辑要提前调。找台真机练手得排队拿别人的设备又欠人情这时候纯仿真联调就派上大用场了。这篇文章我直接把S7-1200博途PLCSIM和MCGS组态软件之间做TCP/IP通信联调的完整路子捋一遍从软件版本怎么搭配、虚拟网卡怎么配到变量怎么填、画面怎么绑最后调试时踩过的坑也一并列出来保证你看完就能自己跑起来一套“软PLC软HMI”的调试环境。先说说这套方案能干什么。博途V16及以上版本自带PLCSIM仿真器S7-1200的CPU可以完全虚拟化运行程序逻辑、定时器、计数器、DB块都能真实执行唯一缺的是物理IO。昆仑通态MCGS嵌入版或者通用版支持TCP/IP驱动可以直连博途的PLCSIM虚拟网卡这样一来HMI画面上的按钮、指示灯、趋势曲线全部通过以太网读写虚拟PLC里的变量效果和真机通信几乎一致。你可以在完全没有任何硬件的情况下把HMI画面逻辑、PLC程序结构、通信异常处理都提前验证个七七八八。适合谁参考正在学S7-1200的初学者、做非标设备需要提前并行开发电气和上位机的工程师、还有接了项目但设备还没到货的调试人员。1. 为什么纯仿真联调能跑通原理先搞清楚很多人以为PLCSIM只是“模拟一下程序运行”实际上博途的PLCSIM在V14以后就已经支持完整的以太网通信仿真了。PLCSIM会在宿主机上虚拟出一块软网卡并且对外表现为一个真实的S7-1200站点监听TCP 102端口。MCGS这边走的是Siemens S7-1200 TCP驱动本质上就是和真实PLC通信时完全一样的S7协议报文。两边能握手成功靠的就是“虚拟站点 标准协议”这一对组合。但这里有个关键前提博途PLCSIM默认只和本机的S7-PLCSIM虚拟网卡通信MCGS如果想要访问这个虚拟PLC必须让MCGS的通信请求也落到同一块虚拟网卡上。也就是说PLCSIM虚拟出的IP地址必须能通过Windows的回环网络被MCGS访问到。早期版本里PLCSIM只在后台监听回环地址127.0.0.1外部程序很难直接连接后来西门子改进了PLCSIM的接口逻辑支持绑定到本机真实的物理网卡或虚拟网卡上这才让MCGS这类第三方上位机有了“连接仿真PLC”的机会。具体到操作上就是把MCGS的TCP驱动目标IP填成PLCSIM虚拟出来的那个IP地址同时确保本机网卡里能“看见”这个IP。这其实就和两台真实设备通信的原理一模一样只不过通信对端从物理PLC换成了PLCSIM进程。MCGS不知道也不关心对面到底是不是真PLC它只认S7协议握手、读写的返回码。这也是为什么纯仿真联调一旦跑通后续切换到真机时MCGS画面基本不用改动最多改一下IP地址就行。2. 软件版本与运行环境准备2.1 博途版本、MCGS版本怎么搭配先说结论西门子博途V16往上都支持V15及更早版本在PLCSIM的TCP通信上非常折腾不建议新手用。我自己常用的组合是博途V16 SP1 PLCSIM V16 昆仑通态MCGS 7.7嵌入版。这个搭配的好处是博途V16的PLCSIM运行稳定对虚拟网卡的支持成熟MCGS 7.7的驱动库里自带“Siemens S7-1200 TCP”不用自己写驱动脚本。如果你用的是博途V17、V18甚至V20思路完全一致PLCSIM版本必须和博途主版本匹配比如V17的博途对应PLCSIM V17不能混用。MCGS嵌入版、通用版、Pro版我都试过嵌入版和通用版对S7-1200 TCP驱动支持最稳定Pro版反而在驱动列表里多了选项但配置界面不同新手容易找不到入口。盘一下版本对应关系博途版本PLCSIM版本MCGS推荐版本备注V15.1V15.17.7嵌入版可以但通信稳定性一般V16 / V16 SP1V16 / V16 SP17.7嵌入版首选组合文档多、坑少V17V177.7嵌入版 / 通用版注意Win10/11系统兼容性V18V18最新版组态新功能多但对老驱动兼容需实测2.2 虚拟网卡与IP地址规划PLCSIM默认会创建一个名为“Siemens PLCSIM Virtual Ethernet Adapter”的虚拟网卡在Windows的“网络连接”里能看到。启动仿真后PLCSIM会提示你给虚拟PLC分配IP这里要特别注意IP地址必须和虚拟网卡在同一个网段否则MCGS连不上。比如我把虚拟PLC设成192.168.1.10子网掩码255.255.255.0那么Windows的虚拟网卡IP建议也手动指定为192.168.1.100同网段即可不一定要填这个值但必须同网段且不冲突。不建议用DHCP自动获取因为PLCSIM每次分配IP时容易换地址MCGS那边就得跟着改麻烦。还有个容易忽略的点Windows防火墙必须放行博途和PLCSIM的通信端口。我遇到过一次MCGS一直“设备连接失败”查了半天发现是防火墙把PLCSIM的进程给拦了放行后立刻恢复。建议在“允许应用通过防火墙”里把以下三个都勾上TIA Portal、S7-PLCSIM、MCGSE运行环境MCGS的运行程序。3. 核心实操步骤从建PLC工程到MCGS连接仿真PLC3.1 第一步建一个带通信能力的S7-1200工程打开博途V16新建项目添加设备时选一个S7-1200 CPU比如CPU 1214C DC/DC/DC。建好之后先在“设备与网络”视图确认CPU的以太网口IP地址这里填的是PLC的站地址属性后续PLCSIM启动时会读取这个地址。我习惯直接给PLC的PROFINET接口设置IP192.168.1.10子网掩码255.255.255.0。接着写一个简单但能验证通信的程序。不用写多复杂但一定要包含不同类型的数据方便后面测试MCGS读写。我平时测试用的最小程序是这样// 网络段1常ON位 Tag_ON : TRUE; // 网络段2自复位定时器2秒一个周期 Tag_Timer.TON(TIME : T#2S, IN : NOT Tag_Timer.Q); Tag_Blink : Tag_Timer.Q; // 网络段3计数器递增 Tag_Counter : Tag_Counter 1;程序里建几个DB变量或PLC变量比如一个Bool型开关量比如Bool_Tag1用于模拟电机启停一个Int型变量Int_Tag1用于显示计数器数值一个Real型变量Real_Tag1用于模拟温度值可以给他写个随定时器变化的逻辑一个String类型字符串String_Tag1用于显示状态文本这里有个经验MCGS通过S7协议访问S7-1200时对String类型的支持不是特别好尤其是DB块里的复杂结构体建议先用基本类型Bool、Int、Real做通通信再加复杂类型。我自用的测试工程里通常会放6~8个基本类型变量确保每个数据长度类型都覆盖到。3.2 第二步启动PLCSIM并下载程序点击博途里的“启动仿真”按钮PLCSIM窗口会弹出提示选择PLC类型和目标IP配置确认IP为192.168.1.10后点击确定。如果虚拟网卡没有正确分配IPPLCSIM会报错这时候去“控制面板—网络连接”里手动设置虚拟网卡IP即可。下载方式选择“PLCSIM”作为目标把程序下载进虚拟PLC。下载完成后把CPU切到RUN状态——注意PLCSIM里默认可能还在STOP需要手动点一下RUN。此时如果程序里有语法或硬件组态错误PLCSIM会拒绝RUN。一个推荐的自检动作在程序里加一个M0.0位在PLCSIM的“操作面板”上手动置位看程序里的定时器是否在跑数值是否在跳。如果程序自己跑得欢说明虚拟PLC状态正常接下来就可以交给MCGS了。3.3 第三步MCGS建工程并配置S7-1200驱动打开MCGS组态环境新建工程设备窗口右键“设备工具箱”在设备列表里找到“通用TCP/IP父设备”和“Siemens S7-1200 TCP”因为S7-1200驱动属于TCP/IP子设备必须挂在“通用TCP/IP父设备”下面。双击“通用TCP/IP父设备”配置网络参数本地IP地址留空或者填虚拟网卡的IP 192.168.1.100远端IP地址填192.168.1.10PLCSIM虚拟PLC的IP双击“Siemens S7-1200 TCP”子设备配置通信参数这一步最关键IP地址192.168.1.10端口号默认102S7协议固定端口不可改机架号0插槽号1S7-1200固定为1通讯方式选“TCP”注意S7-1200不像S7-300那样可以在线检测机架槽位机架号固定0、插槽号固定1填错了通信建立不起来。我用S7-1200 TCP驱动时曾把槽位填成2结果MCGS一直报“设备应答超时”折腾了好久才发现。槽位号不填1会导致握手失败这个坑非常经典后面会再细说。3.4 第四步在MCGS里建立变量并映射PLC地址设备配置好之后在“实时数据库”里建立和PLC变量一一对应的变量。建议命名直接和PLC里的一致比如PLC变量PLC地址MCGS变量数据类型Bool_Tag1%IX0.0 / 或 DB1.DBX0.0电机启动开关型Int_Tag1%IW64 / 或 DB1.DBW2当前计数值数值型Real_Tag1%ID68 / 或 DB1.DBD4温度显示数值型String_Tag1DB1.DBB8状态文本字符串型然后在设备窗口的“Siemens S7-1200 TCP”子设备里双击打开变量连接表把“设备变量”和“实时数据库变量”做映射。这里要注意S7-1200的I/O地址和DB块的地址映射规则I区地址以%I开头比如I0.0映射到MCGS里是“I0.0”Q区地址以%Q开头比如Q0.0M区地址以%M开头比如M0.0DB块地址格式是“DB块号.DBX/DBW/DBD偏移”比如DB1.DBD0如果PLC变量是用优化访问块Optimized Block Access建的DB块那么MCGS直接按DBD偏移量访问会失效因为优化块里变量地址是符号寻址物理偏移是乱的。解决方法是在PLC里把DB块属性取消“优化的块访问”这样物理偏移才固定。这是很多人在用DB块联调MCGS时遇到的最大坑比槽位问题还隐蔽。3.5 第五步组态画面并绑定变量在MCGS用户窗口新建一个窗口放上按钮、指示灯、数值显示框。按钮的“按下”动作脚本关联到“电机启动”变量!BitSet(电机启动, 1)按钮的“抬起”动作脚本!BitSet(电机启动, 0)指示灯用“填充颜色”动画连接关联到“电机启动”变量颜色表达式选择“变量值1时绿色0时灰色”。数值显示框关联“当前计数值”显示格式选十进制整数。字符串显示稍微特殊一点MCGS里字符串变量显示控件要选“标签”或“文本显示”动画连接选“字符串变量”。到这里画面基本成型进入运行环境前先做一次脱机模拟运行在组态环境菜单栏点“模拟运行”看看画面和变量是否正常但此时还没真连PLC。模拟运行只验证MCGS内部逻辑不能替代通信验证。接着退出模拟运行点“运行工程”启动MCGS运行环境运行环境会启动真实通信。如果配置全对设备窗口的指示灯变绿变量开始刷新。此时把PLC里的计数器每隔一秒加一画面上数值会跟着跳手感跟真机一模一样。3.6 第六步让PLC程序和HMI画面循环同步起来联调跑起来之后很多人会忽略一个细节PLC里的数据变化频率和MCGS的采集周期是否匹配。MCGS默认采集周期是1000ms也就是1秒去PLC读一次数据。如果PLC里定时器是100ms翻转一次MCGS画面上看到的可能只是平均效果或者快速跳变的值被漏采。调这个参数的位置在“Siemens S7-1200 TCP”子设备的“采集周期”属性里。把采集周期从1000ms改成200ms甚至100ms数据刷新会更平滑。但注意采集周期太短会增加CPU和网络负担纯仿真环境无所谓真机时还要兼顾PLC扫描周期和通信负载通常放在200~500ms比较合适。中断触发、实时趋势曲线这类对数据连续性要求高的场景建议用“变化率刷新”或者“定时器触发”模式而不只是单纯降低采集周期。MCGS的“定时器触发”可以在子设备里配置能精确到毫秒级。实测中我用100ms采集周期跑趋势曲线画面上显示的正弦波基本平滑没有断点。4. 常见问题与排查技巧实录纯仿真联调看着简单实际连接时问题层出不穷。我把这几个月带学员和客户过程中最常撞上的问题整理成速查表每个都给排查路径现象可能原因解决办法MCGS设备窗口红灯连接失败PLC未启动仿真或IP不在同一网段确认PLCSIM已RUN检查虚拟网卡IP和PLC IP同网段设备连接成功但变量全为0采集周期太快或变量地址映射错误降低采集周期到500ms核对DB块偏移地址能连上但写入失败优化的块访问导致地址无法写入在PLC侧取消DB块“优化的块访问”字符串变量乱码S7-1200 String类型首字节存长度MCGS未按规则解析改用固定长度字符数组或用字节数组格式转换偶尔掉线重连一会又恢复Windows防火墙拦截或虚拟网卡休眠放行PLCSIM、MCGS程序设置虚拟网卡“从不允许计算机关闭此设备以节约电源”博途下载程序报“目标组态不一致”PLCSIM里已有其他程序设备组态不匹配在PLCSIM里Stop后执行“删除所有”再重新下载MCGS运行后画面卡顿采集周期太短画面脚本过于复杂调整采集周期为300ms减少循环脚本4.1 “设备连接失败”排查套路这几乎是最常见的问题占所有联调故障的60%以上。排查就三步一看IP二看端口三看防火墙。看IP在Windows命令行里ping一下192.168.1.10如果能通说明虚拟网卡正常。如果不通去网络连接里看“Siemens PLCSIM Virtual Ethernet Adapter”是否启用右键属性手动指定IP和子网掩码。很多人的虚拟网卡IP自动获取到了一个完全不相干的网段比如169.254开头这就是断连的根源。看端口telnet 192.168.1.10 102如果端口开放则进入S7握手如果提示无法连接检查PLCSIM是否启动。PLCSIM本身不显示监听端口状态我一般用一个叫TCPView的小工具看PLCSIM进程是否有监听102端口的记录。看防火墙直接临时关闭防火墙测试如果关闭后能连上那就是防火墙拦截了。在防火墙允许列表里把PLCSIM和MCGS运行环境的执行程序都加入白名单重启MCGS问题解决。4.2 “PLC变量值读不到”的进阶排查连得上但数值不对这类问题比断连更隐蔽。除了前面提到的“优化块访问”这个大头还有几个细节容易忽略一个是MCGS里的变量字节对齐问题。S7-1200的DB块变量默认是字节对齐的但你在PLC里建了一个Real变量后紧跟着建一个Bool变量DBD偏移可能就不是“上一个变量偏移4”这么简单中间可能有填充字节。最稳妥的做法是把同类型的变量聚在一起放或者干脆记下变量的绝对地址到MCGS里直接填绝对地址不要猜偏移。另一个是符号名带中文的问题。MCGS对中文变量名支持得很好但PLC侧变量如果用中文命名下载到PLCSIM后通信地址解析有时会出问题。建议PLC侧用英文变量名MCGS侧用中文显示名两边通过映射关系对应。我在实际工程里就是这么做的既保证了通信稳定HMI上又能显示中文标签。还有一个可能是硬件中断和通信中断的优先级问题。如果PLC程序里写了大量循环跳转或OB10等中断组织块PLCSIM整体的通信响应会变慢MCGS偶尔会报超时。这不是配置问题而是仿真环境的性能瓶颈。把扫描周期调小减少无关代码通信就恢复正常。4.3 仿真联调里MCGS脚本调试的几个小技巧MCGS运行环境里自带“设备调试”窗口这个窗口能直接看到设备通信状态、收发字节计数、错误码。联调时一定要学会用它。比如S7-1200 TCP驱动如果返回错误码“30”一般是对端拒绝连接错误码“26”是数据写入失败错误码“19”是超时无响应。每次改完PLC程序需要重新下载建议先停MCGS运行环境再下载。因为PLCSIM在下载程序时会短暂断开通信如果MCGS那边处于发送状态可能会缓存一堆错误信息重连时反而会更慢。我习惯的顺序是停MCGS → PLCSIM Stop → 下载 → 切RUN → 启动MCGS整套流程十秒内完成。另外MCGS运行环境有“变量监视”窗口可以实时查看设备变量的原始值和实时数据库变量的值两者对比能判断是通信问题还是组态逻辑问题。如果设备变量有值但实时数据库变量没更新检查“设备变量到数据库变量”的映射是否勾选“读写”有些版本默认只读属性导致画面写了变量但传不到PLC。4.4 PLCSIM自身的隐藏坑PLCSIM运行久了CPU占用率会涨得比较高尤其是大工程程序。我遇到过仿真跑了两个小时之后MCGS出现周期性延迟点按钮要等两三秒才有反应。后来发现是PLCSIM的虚拟CPU过载把程序里一些无关测试用的循环删掉占用率马上降下来通信又流畅了。如果PLCSIM异常退出第二次启动时有时会提示“实例已存在”或“许可证被占用”。这时去任务管理器把S7PLCSIM相关的进程全部结束再重启PLCSIM即可。偶尔Plcsim.exe进程卡死杀不掉的话重启Windows但这个问题在V16 SP1后基本很少见了。5. 实操心得从“能连上”到“用得好”进阶细节分享能连上只是第一步真正在项目里用好纯仿真联调还有些细节值得说一说。一个是规划变量表。我一般会在PLC里专门建一个“HMI通信”DB块把需要和HMI交互的变量全部集中在里面命名为HMI_Data。这样MCGS连接时就只映射这一个DB块地址清清楚楚不用翻遍全工程找变量。真机上线时这个DB块原封不动下载进PLCMCGS配置零改动省了大量联调时间。DB块的结构规划也有讲究。我建议按功能分区前面10个字节放开关量状态区中间放模拟量数值区后边放命令区HMI下发命令命令区的变量由PLC程序在扫描周期末尾集中处理。这样变量不散落程序结构也清晰。第二个是数据类型匹配。MCGS的数值型变量是32位浮点PC/嵌入版里整数和浮点混用时要注意。S7-1200侧如果用Int型16位MCGS侧显示的数值范围必须限制在-32768到32767以内。如果PLC侧是DInt32位整数MCGS侧映射时要注意字节顺序——低字在前还是高字在前由PLC的“DBB”字节序决定S7-1200是大端存储MCGS这块我在工程里实测下来是跟随驱动的不需要手动调整但如果你用的是旧版MCGS建议先做一个整数2000H的读写测试确认高低字节顺序。第三个是通信数据的“心跳”检测。联调时很好用PLC里搞一个周期变化的计数器比如每秒加1MCGS画面上放一个数值框显示它。如果这个值和PLC里实际值一直同步说明通信链路完全正常。如果不同步果断查变量地址或采集周期而这个“心跳计数器”在真机调试时也建议保留可以作为系统运行状态的诊断抓手。我自己做过的几个项目里最复杂的一套是4台S7-1200通过Modbus TCP轮询那套没法用单个PLCSIM仿真因为一台PC上跑不了多个PLCSIM实例。后来改用纯软件模拟从站的方式配合MCGS Modbus TCP驱动联调。所以说“博途S7-1200和MCGS纯仿真联调”覆盖的是工业现场最常见的“一台PLC带一到两块HMI”的场景更多变的系统还是要结合具体架构灵活变通。5.1 另外聊一下博途V16下载和GSD组态这类周边问题搜索热词里有很多人在问“博途V16怎么下载”“如何用GSD文件组态G120变频器”这些其实都和联调环境搭建有关。博途V16的安装包官方试用版可以直接下载授权可以用试用授权或按官方流程申请一套完整安装包大约20GB建议放在SSD盘安装。GSD组态G120变频器是另一条独立流程把GSDML文件导入博途→在设备视图里添加G120从站→分配设备名称→下载组态→在线分配设备名。和S7-1200直连MCGS不同变频器走的是PROFINET IO通信MCGS要采集变频器数据通常通过PLC中转而不是直接读变频器。纯仿真联调时G120从站在PLCSIM里也能组态进去但物理IO和报文数据要在程序里手动映射复杂度高一档新手建议先玩通PLC直连HMI再做扩展。5.2 从“MCGS和MQTT”到云端仿真联调还能延伸多远热词里还有“mcgs和mqtt”这其实是MCGS往物联网方向扩展的话题。MCGS嵌入版7.7之后的版本有MQTT插件可以把变量上传到云端。有趣的是这套纯仿真联调环境同样可以用来调试MQTT链路PLC侧逻辑跑在PLCSIM里MCGS通过S7 TCP驱动采集数据再通过MQTT插件转发到本地或云端MQTT Broker。也就是说你可以在一台没有实体PLC的电脑上把整条“虚拟PLC → HMI → 云平台”的数据链路都打通。我在调试一个设备上云项目时就是先用这套环境把MQTT主题、QoS级别、上报周期全部验证完毕等实物到场后直接把配置搬过去当天就上了线。6. 个人经验小结希望你能少走弯路最后分享几个我实操下来最有价值的体会。第一不要把PLCSIM当成“玩具”。它在处理中小型程序时的时序精度、通信协议栈完整度都非常接近真实PLC用它联调MCGS和真机联调的差异主要在响应延迟上。PLCSIM的通信延迟一般比真机高几十到一两百毫秒这受电脑性能和虚拟网卡影响。如果你调试的是指示灯、按钮、数值显示这类人机交互这个延迟完全感知不到但如果是伺服轴的实时启停和跟随控制纯仿真就力不从心了必须上真机。第二每次修改PLC变量表记得同步检查MCGS侧的映射。这块没有任何自动化工具纯手工维护。我试过多次“PLC漏改了一个DB偏移导致MCGS读到乱七八糟的值”排查下来就是在MCGS侧对偏移时算错了一个字节。建议把变量映射表用Excel维护一人多项目时尤其重要。第三IP地址规划别嫌麻烦。虚拟网卡设一个固定IP如192.168.1.100PLC设192.168.1.10MCGS远端IP填192.168.1.10。这套规划我用了很久简单又不容易错。真机调试时只需把PLC的IP改成实体CPU的IP其他全都不用动MCGS画面直接切到运行环境就能用。第四仿真联调同样要养好版本习惯。博途版本升级后旧工程打开会有升级提示升级后PLCSIM版本也要跟着升MCGS驱动理论上向下兼容但老MCGS版本连新PLCSIM可能遇到兼容问题。我们团队现在的标准配置是博途V17 SP2 PLCSIM V17 MCGS 7.7 SP3稳定运行了大半年没出过莫名奇妙的通信问题。如果你还在用更老的版本只要能跑通不建议频繁升级稳定压倒一切。还有个小经验调试时把PLCSIM窗口放在副屏MCGS运行环境放主屏两边数值同步跳动的画面很有成就感也方便快速判断通信是否卡顿。如果PLC值在变但HMI数值长时间不动基本就是通信中断或映射错了不用等赶紧查。纯仿真联调这条路走通之后你会发现HMI开发不再依赖硬件到达的时间节点电气调试可以和机械装配完全并行。项目周期缩短一截返工率也明显下降。希望这篇实战指南能帮你少踩几个坑在博途S7-1200和昆仑通态MCGS的世界里跑得比谁都顺。
返回列表