1. 为什么现在还要碰S7-300/400:这块"老平台"的真实价值
如果你刚入行,打开招聘软件看一眼,会发现不少岗位写的是"熟悉TIA Portal、S7-1200/1500",但真正走到工厂现场,尤其是化工、冶金、水处理、汽车产线这些行业,你会发现机柜里躺着大量S7-300,甚至还有S7-400在跑关键工艺。说它们"老古董"不假,但说它们该淘汰,那是没干过运维的人才会说的话。
我见过太多这样的场景:一条产线控制系统是S7-300,CPU还是十几年前买的,备件库里囤着同型号模块,工程师换了一茬又一茬,但程序始终还在这套老环境里维护。设备不坏就没人愿意动它,因为改造一条在运行的产线,成本比想象中高得多。这就导致一个很现实的需求:你不需要会造这套系统,但你必须看得懂、改得动、能调试它。而这一切的起点,就是STEP7软件和它配套的仿真环境。
这篇内容就是系列的第一篇,面向的是从零开始接触S7-300/400的人。我默认你有一点电工基础或者接触过其他PLC,但不要求你用过西门子。我会从软件选择讲起,讲到项目结构,再讲到如何用PLCSIM把一台虚拟的S7-300跑起来,最后用一个点动自保持的小例子,把"写程序-编译-下载-仿真-验证"整条链路走通。
有一点必须先说清楚:S7-300/400的经典编程环境是STEP7 V5.x,不是TIA Portal。虽然TIA Portal也能组态S7-300/400,但现场存量项目的维护,绝大多数还是在STEP7 V5.x里完成的。所以这个系列我以STEP7 V5.x为主线,后面如果有需要,再单独讲TIA Portal环境下怎么兼容老项目。先把这条线扎扎实实走完,你再去接触TIA,会轻松很多。
2. STEP7软件版本怎么选:安装之前先把这些搞明白
2.1 V5.5和V5.6,到底装哪个
这是新手问得最多的问题。STEP7 V5.x常见的有两个大版本:V5.5和V5.6。V5.5是很多老工程师用了很多年的版本,稳定,资料多,网上随便一搜都是教程。V5.6是相对较新的版本,最大的变化是操作系统兼容性更好,原生支持Windows 10。
我的建议很直接:如果你电脑是Windows 10或Windows 11,优先V5.6。V5.5装在Win10上不是不能用,但需要各种兼容性设置,运气不好还会遇到软件激活异常、帮助文档打不开之类的小毛病。V5.6省心很多,安装过程也规范。
如果你是Windows 7的老机器,那V5.5 SP5完全够用,没必要折腾V5.6。下面是常见的操作系统和版本搭配,供你参考:
| 操作系统 | 建议STEP7版本 | 备注 |
|---|---|---|
| Windows 7(32/64位) | V5.5 SP4/SP5 或 V5.6 | 老项目维护常用V5.5 |
| Windows 10(64位) | V5.6 | 最省心的组合 |
| Windows 11(64位) | V5.6 + 较新补丁 | 部分机器需关闭UAC或做兼容性设置 |
注意,STEP7 V5.6的安装包有时候不带最新的Service Pack,装完基础版之后,建议再打上对应SP补丁。补丁的作用不只是修Bug,还会增加新CPU的硬件组态支持。如果你手里的CPU型号比较新,硬件组态里找不到,大概率就是没更新硬件支持包(HSP)或者Service Pack版本太低。
2.2 安装操作系统的三个"潜规则"
安装STEP7看起来是双击setup.exe,但实际上有几个准备好了能省不少事的细节。
第一,关闭用户账户控制(UAC),至少把级别拉到最低。安装过程中很多组件需要写注册表、装驱动,UAC级别太高会弹窗,甚至直接中断。装完软件之后你再把UAC调回去,不影响使用。
第二,不要用中文用户名,项目路径也尽量用英文。这不是玄学。STEP7的很多历史组件底层对Unicode支持并不完善,中文路径会导致编译报错、仿真连接失败等奇奇怪怪的问题。我见过有人把工程放在D:\项目\产线1\下面,编译的时候老是提示找不到块,改成D:\PLC_Project\Line1\就好了。为了省事,从装软件那天起就养成用英文路径的习惯。
第三,先装STEP7,再装PLCSIM。这个顺序很重要。PLCSIM的安装会检测STEP7的环境,顺序反了,仿真器可能识别不到STEP7,后面下载的时候会提示找不到目标PLC。如果你还装了其他西门子软件,一般也是先装基础工程软件,再装仿真、通讯类组件。
安装过程中如果提示"请重新启动计算机"然后中断,重启后再次安装通常能解决,这是西门子软件安装的老毛病了。
2.3 授权(License)这件事,说透了就不难
STEP7 V5.x用的是独立的授权管理器——Automation License Manager。你拿到软件之后,里面一般会附带授权文件(通常是一个.zip或者一个单独的文件夹),需要在授权管理器里把授权转移到本机。
打开Automation License Manager,左侧是本机的授权存储位置,一般叫"我的电脑"下面的某个盘符,实际存储路径通常是C:\Program Files (x86)\Common Files\Siemens\...,你不需要手动找文件位置,界面操作就行。
操作分两步:先在左侧选中本机存储位置,然后右键点击"Transfer License"或"Install License",把授权文件导入。导入成功后,右侧窗口能看到对应的授权条目,比如"STEP7 Professional 2006"之类,并且状态是未过期才说明有效。
关于试用期,STEP7装好后不导入授权也能用一段时间,界面里会有剩余天数提示。但千万不要依赖试用期,一方面有些功能受限,另一方面试用到期前你得把所有程序都导出去,不然项目文件可能打不开。正规做法还是装完就导授权,一劳永逸。
3. 第一次打开STEP7:界面里那些你不认识但必须认识的窗口
3.1 先从项目结构看起,别直接点新建
双击SIMATIC Manager图标,你看到的是西门子经典的项目管理器界面,蓝白色调,左边是项目树,右边是对象视图。第一次打开可能会有点懵,因为它的组织方式和现在常见的软件不太一样。
在STEP7里,项目的结构是一个从大到小的嵌套:项目 → 工作站(Station)→ CPU → S7程序 → 各个块。
一个项目可以包含多个工作站,比如一条产线有PLC1和PLC2两台CPU,就可以放在同一个项目下管理。工作站下面挂的是硬件组态和CPU信息,而S7程序才是真正写逻辑的地方。S7程序下面会分几个文件夹:Blocks(块)、Sources(源文件)、Symbols(符号表)。新手最容易搞混的就是,双击项目里的"SIMATIC 300工作站"和双击"S7程序"根本不是一回事——前者管硬件,后者管程序。
这种结构的好处是,硬件组态和软件程序分离,换CPU型号或者改模块地址,都不影响已经写好的逻辑块。
3.2 硬件组态:这个窗口决定了你的PLC"长什么样"
在项目树里双击工作站下的"硬件"图标,会打开HW Config窗口。这个窗口才是STEP7的核心入口之一。右边有一排硬件目录,CPU、电源模块、数字量模块、模拟量模块都从里面拖。
你可能会问:"我只想写个程序,为什么要先组态硬件?"因为S7-300/400的程序不是凭空运行的,它需要知道你用的是哪个CPU、有多少输入输出点、地址怎么分配。程序里的I0.0、Q4.2这些地址,其依据就是硬件组态里的模块地址分配。
组态的时候要注意几个点。第一,CPU型号选错了,后面下载程序到仿真器可能会失败,因为仿真器是按型号模拟的。第二,机架(Rack)上模块的槽位不是随便放的,S7-300的CPU固定在2号槽,电源在1号槽,信号模块从4号槽开始放。这是硬件规范,组态时也要遵守。第三,模块地址默认是按槽位自动分配的,比如第一个DI模块占I0.0到I3.7,第二个占I4.0到I7.7,你可以在模块属性里改,但没特殊情况就别动,保持默认最不容易出错。
硬件组态完,保存并编译,系统会生成一个系统数据块(SDB),下载程序的时候它会跟着一起进PLC。这也是初学者容易忽略的一步:只下载程序块、不下载硬件组态,设备跑起来后I/O地址和你想象的对不上。
3.3 符号表和块编辑器:编程的"翻译官"
在S7程序下的Symbols文件夹里,你可以打开符号表。这个表的作用是把I0.0这种抽象地址翻译成人话,比如把I0.0定义为"启动按钮",把Q0.0定义为"接触器"。
很多初学者觉得写程序的时候直接写地址更快,不愿意维护符号表。但实际项目里,一个程序少说几百个变量,你三个月后回来看当初写的程序,I0.0和M10.3根本记不清分别是什么。有了符号表,不仅在梯形图里显示的是中文名字,鼠标悬停还能看到具体地址,维护效率完全不是一个级别。
块的编辑器是写逻辑的地方,支持三种语言视图:LAD(梯形图)、STL(语句表)、FBD(功能块图)。同一个块的这三种视图本质上是同一份代码,你可以随时切换。新手建议从LAD入手,和继电器控制逻辑很像,最容易理解。STL也别丢,S7-300/400的大量存量程序是用STL写的,看不懂STL,很多老项目你根本读不下去。
4. 用S7-PLCSIM搭一台虚拟PLC:不用硬件也能调试程序
4.1 PLCSIM版本的匹配问题
S7-PLCSIM是STEP7自带的PLC仿真器,它可以在你电脑里虚拟出一台完整的S7-300/400,不需要真实硬件就能下载程序、监视变量、模拟输入输出。对学习来说,这东西价值太大了——你可以随便试,试错了也不烧硬件。
但PLCSIM有个让新手非常头疼的点:版本必须和STEP7匹配。装了个STEP7 V5.6,却拿了个老版PLCSIM安装包,装完之后仿真器可能找不到STEP7,或者下载程序时提示通讯失败。
常见的组合大致是这样的:
| STEP7版本 | 常见PLCSIM版本 |
|---|---|
| V5.4 SP5 | PLCSIM V5.4 SP1/SP2 |
| V5.5 SP4 | PLCSIM V5.4 SP5 |
| V5.6 | PLCSIM V5.4 SP8 |
代码块里的对应关系来源于多数实际部署环境,我的建议是:你从哪拿到STEP7安装包,就从同一个来源拿PLCSIM。打包好的软件包一般会注明配套版本。装完打开PLCSIM,如果能正常启动并且和STEP7通信,说明版本对上号了。
4.2 从空项目到把程序下载进虚拟PLC
打开PLCSIM之后,界面是一个模拟的操作面板,有RUN、STOP开关,还有一排指示灯。但你得先在STEP7里组态好硬件、写好程序,才能把东西下载进去。
具体步骤是这样的:
第一步,在SIMATIC Manager里新建项目,插入一个SIMATIC 300工作站,双击进入HW Config,从硬件目录里拖一个CPU进来。比如用CPU 315-2 PN/DP,这个型号比较典型,仿真支持也好。
第二步,在S7程序下新建一个OB1(组织块1),这是PLC的主程序块,相当于循环扫描的"主函数"。OB1的内容会每个扫描周期执行一遍,用户逻辑就写在这里面。
第三步,先启动PLCSIM。如果PLCSIM能正常跟STEP7通信,你会看到仿真CPU的型号自动变成了你组态的那个。这时候在STEP7里点下载按钮,会弹出目标选择对话框,会让你选"整个工作站"还是只下载某个块。初学者建议选"整个工作站",把硬件组态和程序块一起下载进去。
第四步,在PLCSIM界面上把CPU拨到RUN状态,绿色指示灯亮起,模拟的PLC就开始执行程序了。
我第一次用PLCSIM的时候还犯过一个低级错误:程序下载进去了,但CPU还在STOP状态,我怎么拨那个开关都没反应,后来发现是PLCSIM的版本和STEP7不兼容,导致通讯时序有问题。你如果遇到类似情况,先检查版本匹配,再看STEP7左下角的系统消息窗口,那里会把问题写得很清楚。
4.3 仿真器的边界:哪些能模拟,哪些模拟不了
PLCSIM能模拟CPU的指令执行、位逻辑、定时器、计数器、数据块读写,对学习编程和调试逻辑来说完全够用。但它也有几个天然的边界,提前知道能避免走弯路。
第一,数字量输入不是自动变化的。在真实PLC里,你有按钮按下、有传感器信号,输入点会变化。在仿真里没有物理信号,你要手动改输入值。PLCSIM界面里有一排输入字节指示,比如IB0、IB1,点一下就是强制该字节的某一位为1或0。你可以通过这个方式模拟按钮动作。
第二,模拟量模块没有真实信号来源。你在仿真里读不到真实的4~20mA信号,只能手动给模拟量通道赋值,或者通过变量表强制写入。所以涉及PID调参、模拟量滤波这种跟真实信号强相关的内容,仿真只能帮你验证逻辑,不能帮你验证传感器标定。
第三,通讯类功能仿真不完整。PROFIBUS DP从站、PROFINET IO设备的通讯行为,PLCSIM对它们的支持很有限。你可以在组态里配置从站,也可以下载组态,但要让从站数据在仿真里正常交互,难度大且限制多。这一块还是得靠真机。
理解这些边界,你才能在遇到"仿真和真机行为不一样"的时候快速定位问题,明白不是程序写错了,而是仿真器压根不支持这个功能。
5. 第一个可运行的小程序:用点动自保持把整条链路走通
5.1 建OB1、写梯形图、编译下载
前面已经把环境和工具都铺好了,现在写一个最经典的点动自保持程序。这个程序模拟的是一个电机启动/停止控制:按下启动按钮,接触器吸合并保持;按下停止按钮,接触器断开。
在OB1里,用LAD视图写梯形图,逻辑只有三行核心内容:
- 第一行:启动按钮常开触点(输入I0.0)与接触器自保持触点(输出Q0.0的常开触点)并联,再与停止按钮的常闭触点(输入I0.1)串联。
- 第二行:输出线圈Q0.0。
对应的LAD逻辑展开是这样的:当I0.0按下,Q0.0得电;Q0.0得电后,它自己的常开触点闭合,即使I0.0松开,电流也能通过自保持回路继续维持Q0.0;只有当I0.1按下,常闭触点断开,Q0.0断电。
这个逻辑的原理,本质上是继电器控制里典型的"自锁/自保持"电路。PLC的扫描机制和它天然匹配:每个扫描周期,OB1从头到尾执行一遍,输出映像区在扫描结束后统一刷新。自保持的本质就是"输出反馈到输入"。
写完之后,点击菜单栏的Program → Compile,或者直接短按F5编译。编译会检查语法和地址引用,如果有错误,下方窗口会列出,双击错误条目会跳到具体位置。我建议养成每次写完一小段就编译的习惯,别等写了一大堆再一次性编译,否则定位错误很费劲。
编译通过后,还是用下载功能,把OB1下载到PLCSIM里。下载完把仿真CPU切到RUN,你会看到梯形图中能导通的线路变成了绿色高亮,这就是在线监视状态。点击工具栏上的"眼镜"图标进入监视模式,你就能实时看到哪个触点通了、哪个线圈有电了。
5.2 用变量表和PLCSIM模拟输入,验证你的程序对不对
监视梯形图能直观看到逻辑通断,但更高效的调试方式是变量表(VAT)。
在S7程序下的Blocks文件夹里,右键新建一个变量表,比如VAT_1。在里面填入需要观察的地址,通常填I0.0、I0.1、Q0.0,状态列为显示值。然后打开PLCSIM的输入状态界面,找到IB0这个字节,它的位上对应I0.0到I0.7。
调试步骤是这样的:
第一步,在变量表里监视这三个地址的初始状态。CPU在RUN状态时,它们应该都是0,Q0.0线圈当然也是0。
第二步,在PLCSIM里点击IB0的第0位(对应I0.0),把它从0变成1,模拟按下启动按钮。此时看变量表,I0.0变为1,Q0.0应该也会变成1。
第三步,再把PLCSIM里的I0.0调回0,模拟松开按钮。这时候重点来了:因为自保持回路的存在,Q0.0应该保持为1,而不是跟着I0.0一起掉下去。如果你看到Q0.0掉成了0,说明你的自保持触点接线或者逻辑写错了。
第四步,点击IB0的第1位(对应I0.1),把它变成1,模拟按下停止按钮。此时Q0.0应该变成0,自保持被解除,再松手也不会有任何变化。
整个过程中你会注意到一个细节:梯形图监视里,即使你改了PLCSIM里的输入值,画面刷新可能有延迟。这时候先看变量表,变量表的刷新更快更准确。这也是我调试时优先用变量表而不是盯着梯形图看的原因。
5.3 仿真调试的进阶小技巧
基础验证通过后,你可以试着给自己的程序加"料",体会仿真的灵活之处。
比如,把停止按钮的常闭触点改成常开触点,程序逻辑会有微妙变化;再比如把Q0.0的自保持触点改成用M0.0中间继电器替代,然后多加几个输出点,体会"中间变量"在程序里的意义。PLCSIM的变量表里不仅能改输入,还能强制输出和中间位,你可以在仿真里尝试各种"如果程序是这样写的,会发生什么"的假设,这种试错成本为零的学习方式,是真实硬件给不了的。
还有一个很实用的功能:PLCSIM支持保存仿真状态。你在仿真中运行到某一个中间状态,比如Q0.0刚好为1、定时器刚好计到一半,可以保存快照,下次重启PLCSIM直接恢复这个状态。排查复杂问题时,这个功能能帮你省下大量重复操作。
6. 走过新手期后会遇到的三个典型坑
6.1 下载程序时提示"通讯错误"
这个问题的出现频率几乎排第一。明明PLCSIM都打开了,下载却失败,提示找不到CPU或者通讯超时。排查思路按顺序来:先确认PLCSIM和STEP7版本匹配;再确认PLCSIM里显示的CPU型号和STEP7硬件组态里的一致;最后检查STEP7的Options → Set PG/PC Interface,如果是仿真模式,接口应该指向S7PLCSIM。很多时候问题就出在接口没选对,系统还在找真实通讯卡。
另外,下载之前必须保证HW Config窗口是关闭的。STEP7有时候会锁定硬件组态文件,窗口没关会导致下载整个工作站的时候冲突。
6.2 仿真里程序不跑,但没报错
PLCSIM里CPU显示STOP,但你明明拨了RUN开关。这种情况首先要看PLCSIM界面的指示灯颜色,如果显示红色,说明CPU处在停止或故障状态。点开PLCSIM的Diagnostics菜单,查看缓冲区信息,里面会显示最近一次停机的原因。
新手最常见的停机原因是:下载了硬件组态包含仿真不支持的模块,或者程序中有非法指令。比如用了通讯功能块且组态了不支持的连接,下载时不一定报错,但一执行就STOP。这类问题没法完全避免,只能靠看诊断缓冲区的信息定位。养成"一停机就看诊断"的习惯,会省很多时间。
6.3 程序改了半天,下载后还是老样子
这个问题有迷惑性,尤其对新手。在STEP7里修改程序后,如果直接点下载,有时候下载的是当前选中块,而不是整个工作站。如果你只改了OB1,但忘记下载OB1,CPU里跑的依旧是最初的版本。
解决方案是下载前在项目树里选中要下载的块(或者直接选S7程序文件夹),再点下载按钮。更稳妥的做法是,第一次下载完成后,后续每次改动都用"仅下载修改的块"选项,这样既快又不容易漏。下载完成后看一眼PLCSIM里的块版本号,确认和STEP7里的一致,再开始调试。
7. 关于接下来怎么学,我的个人建议
这一篇已经把软件、仿真环境、基本项目结构和下载调试链路讲完了,按这个路线走下来,你应该能体会到"在电脑里拥有一台PLC"的感觉。但入门最容易犯的错误是急于求成——刚能跑起自保持就开始研究通讯、PID,结果越学越乱。我的建议是先花一段时间把基础指令轮番在仿真里试一遍:定时器TON、TOF、线圈置位复位、计数器、比较指令、数据移动,每个都配一个小场景去验证,比如用定时器做一个闪烁灯,用计数器做一个循环次数统计。
等基础指令熟练了,再去研究数据块(DB)和功能块(FC/FB)的组织方式,这会是S7-300/400编程里第一个真正的分水岭。很多人卡在"程序能跑但结构混乱"的阶段,就是因为GETALWAYS用OB1堆逻辑,不去思考程序怎么组织更清晰。
最后分享一个环境维护的技巧:装好STEP7和PLCSIM之后,我对整个系统做了一个镜像备份。因为这套软件环境一旦出问题,重装很费时间,而工程现场最缺的就是时间。镜像备份之后,我装任何新组件、试任何新版本,都不怕把环境搞崩。你也可以用虚拟机做这件事,把一套干净的环境固化成模板,随用随取。这样折腾软件的时候,你就永远不会心疼——反正坏了大不了恢复一次。