干工控的,谁还没被博图(TIA Portal)折腾过几个通宵?今天不聊虚的,就拿西门子 TIA Portal V18 这个版本,用 LAD 梯形图,带你把一个电机启停控制程序从头到尾完整跑一遍——建工程、写逻辑、仿真、下载,一步不落。这个项目有多经典?就好比编程界的 Hello World,但它背后藏着的自锁/互锁、急停处理、变量规划这一整套基本功,才是真正值钱的东西。
这篇内容适合刚接触博图的电气工程师、设备维护人员,也适合自动化专业的学生。我尽量按实战流程来讲,包括当时自己踩过的坑、容易忽略的细节,以及网上问得最多的“仿真无法启动”“找不到许可证”这类问题,都会一并梳理清楚。
1. 准备工作:V18环境与创建第一个工程
1.1 V18 相比老版本到底改了什么
很多同事还在用 V13、V14,一听说我换到 V18,就问“到底值不值得换”。我的看法是:如果你做 S7-1200/1500 项目,V18 用起来确实比老版本舒服不少,主要体现在三个方面。
第一是界面和交互,V18 的 HMI 组态和 PLC 编程已经非常无缝,做设备联调时甚至可以在同一个窗口里同时看 PLC 程序和画面状态;第二是对 Windows 11 的支持更完善,新装电脑不用再费劲兼容旧系统;第三是对 S7-1200 和 S7-1500 新固件的支持更全,一些新指令和工艺对象只有高版本才有。
当然,版本升级不是必须的,如果你的项目已经在老版本里跑得很稳,就没必要为了升级而升级。但如果你准备新学博图,或者要接触新设备,我建议直接一步到位学 V18,少走弯路。今天这个项目,就是用 V18 来做的。
1.2 安装时的三条铁律
装博图 V18 之前,有几点必须说清楚,不然很容易装到一半崩掉,或者装完各种弹错。网上搜“博图 v18 安装教程”的人很多,其实关键点就几条。
第一,安装路径绝对不能有中文和空格。我见过有人装在D:\程序\西门子下面,结果项目打开就报错,路径问题会跟着你很久。第二,安装前一定关掉杀毒软件和 Windows Defender 实时保护,博图安装过程中会启动服务、写注册表,安全软件经常拦,拦一次装完就少一个组件,后面根本查不出来。第三,必须右键“以管理员身份运行”安装程序,否则授权组件和仿真组件都可能装不全。
另外说一句,正版授权建议走西门子官网试用或向代理申请,别去找什么“许可证补丁”“破解工具”。博图这种工业软件一旦被动了授权文件,轻则仿真起不来,重则整个系统不稳定,项目做一半丢数据,得不偿失。等下我会在常见问题里专门讲“找不到许可证”怎么处理。
1.3 建工程与硬件组态
装好 V18 之后,双击桌面图标,第一个界面选“创建项目”,项目名称我一般直接用“Motor_Start_Stop”,路径保持在默认英文目录下就行,不用建子目录。
创建完项目,左侧项目树里找到“添加设备”,双击,然后选控制器。今天我们用的是 S7-1200,我习惯选 CPU 1214C DC/DC/DC,具体型号根据你手头的实物来定。选定后注意看一下固件版本,V18 默认支持的版本比较高,如果实物固件老,后面下载时会提示不匹配,这个不要慌,后续在“在线和诊断”里做固件更新或者改组态版本都能解决。
组态画面打开后,第一步不是写程序,而是先把 CPU 的 IP 地址设好。双击 CPU 的网口,在属性里设置 IP 地址,我习惯用192.168.0.1,子网掩码255.255.255.0。这一步很关键,后面无论是仿真还是下载到真实 PLC,都靠这个地址通信。然后我们把 PLC 变量表打开,准备做 I/O 规划。
2. 需求拆解:电机启停控制的 I/O 规划
2.1 控制要求第一条:先搞清楚要控什么
很多初学者拿到项目就直接打开 OB1 开始拖触点,这是最大的问题。编程之前必须先写“控制要求”。电机启停控制,听起来简单,但完整的要求至少有四条:
- 按下启动按钮,电机启动并保持运行;
- 按下停止按钮,电机停止;
- 热继电器过载动作时,电机强制停止,故障排除后必须重新按启动才能运行;
- 运行状态要有指示灯指示,急停按下时任何情况下都要停机。
为什么要先把要求写清楚?因为控制要求的差异,直接决定 I/O 分配和程序结构。比如热继电器信号,你是按“常闭触点接入 PLC”还是“常开触点接入 PLC”,程序里用的触点类型就完全不同。再比如要不要故障指示灯,你就要考虑是否需要故障记忆。这些不在一开始定下来,后面改起来很麻烦。
2.2 I/O 分配表
定了要求之后,接下来做一个 I/O 分配表。这个表是“图纸”和“程序”之间的翻译官,现场接线靠它,写程序也靠它。
| 信号名称 | PLC地址 | 数据类型 | 说明 |
|---|---|---|---|
| 启动按钮 | I0.0 | BOOL | 常开,按下时闭合 |
| 停止按钮 | I0.1 | BOOL | 常闭,程序里用常闭触点 |
| 热继电器 | I0.2 | BOOL | 常闭,正常时闭合 |
| 急停按钮 | I0.3 | BOOL | 常闭,串在急停回路中 |
| 电机接触器 | Q0.0 | BOOL | 输出到接触器/中间继电器 |
| 运行指示灯 | Q0.1 | BOOL | 电机运行时亮 |
这里很多新手会有一个疑问:为什么停止按钮、热继电器、急停按钮在程序里都用“常闭触点”?这是因为安全原则。如果现场急停回路断线了,或者热继电器跳闸了,我们希望在软件层面输出立刻断开,设备停下来。使用常闭触点可以做到“断线即停车”,也就是故障安全。这个逻辑考虑清楚了,你的程序才算入门。
2.3 两条编程路线:自锁 LAD 和置位复位
电机启停控制程序,从实现方式来看,最常用的是两种:一种是传统的 LAD 自锁回路,一种是使用置位(Set)/复位(Reset)指令。
LAD 自锁回路最直观,它就是把继电器控制电路里的“自保持触点”直接搬到梯形图里,会看电气图纸的工程师上手非常快。它的核心逻辑是:启动按钮并联一个输出触点,输出一接通,自己给自己“喂电”,松开按钮后输出继续维持。
置位复位方式则更贴近软件思维:启动时把 Q0.0 Set,停止时把 Q0.0 Reset。两条路线各有利弊。今天这个项目我用传统的 LAD 自锁回路,因为它是理解梯形图逻辑的基石,也是最容易排查问题的结构。
3. LAD 梯形图实操:把启保停逻辑落到 OB1 里
3.1 第一段程序:启保停主回路
双击 OB1 打开程序块,第一段网络我命名为“电机启停控制”。然后从右侧指令列表里拖入一个常开触点、一个常闭触点、一个输出线圈,再加一条并联分支。
具体连线是这样:I0.0(启动按钮常开)作为第一行输入,它右边串联 I0.1(停止按钮常闭)、I0.2(热继电器常闭)、I0.3(急停常闭),线圈接 Q0.0。然后在 I0.0 这个常开触点上并联一个 Q0.0 的常开触点,这就是自锁。
我们来走一遍逻辑。初始状态,停止按钮、热继电器、急停都正常,所以 I0.1、I0.2、I0.3 都为 1,此时回路是通的。按下启动按钮,I0.0 为 1,Q0.0 得电。松开启动按钮,I0.0 变为 0,但并联的 Q0.0 常开已经闭合,电流依然能通过,输出保持,这就是自锁或自保持效果。
按下停止按钮,I0.1 变为 0,回路断开,Q0.0 失电,同时自锁触点断开。松开停止按钮,I0.1 恢复为 1,但启动按钮没有按下,回路不会自己接通,电机不会自己启动。这就是“停止优先”的典型实现。
这里必须提醒一句,仿真调试时,I0.1、I0.2、I0.3 这三个输入在初始状态下必须被“强制置 1”,否则整个回路是断开的,你按启动按钮根本没反应。这个坑我见过很多人踩,程序看着没问题,仿真就是不动,然后开始怀疑软件坏了。其实是停止按钮的常闭触点还没“复位”。
3.2 第二段:运行指示灯
主回路写完,指示灯就简单了。新建一个网络,命名为“运行指示灯”,直接拖一个输出线圈 Q0.1,然后在它前面画一条和 Q0.0 并联的连接即可,也可以直接把 Q0.1 的线圈输出放在 Q0.0 的回路里。我更习惯单独用一段网络接一个“Q0.0”的常开触点,然后串联输出 Q0.1,这样逻辑分层清楚,现场看图的人也容易懂。
如果你想加故障指示,可以加一个小逻辑:当热继电器动作时(I0.2 变为 0),输出一个故障灯 Q0.2。注意,因为 I0.2 在正常时为 1,所以表达故障信号要用 I0.2 的常闭触点串联 Q0.2。也就是“常闭触点闭合 = 故障发生”。这个思路和急停按钮是一样的,初学的时候可能绕一下,但想通之后,你会发现 PLC 里“常开常闭”的本质其实很简单:始终记住“信号为 1 时,常开触点闭合;信号为 0 时,常闭触点闭合”就行。
3.3 OB1之外,要不要写函数块
项目很小,直接全写在 OB1 里完全没有问题,PLC 扫描周期短,逻辑也简单,不会造成任何性能问题。但我想多说一句:如果你是做多台设备的项目,比如有 5 台电机,每台都是启停控制,最好的做法不是复制五遍梯形图,而是做一个 FB(函数块),把“启保停”封装成一个通用的块,每台电机调用一次,用不同的背景数据块存状态。
这样做的优势非常明显:第一,程序量减少,改逻辑只需改一处;第二,每个电机的输入输出地址通过接口传递,接线和程序对照更清晰;第三,后面要加延时、加运行时间统计,都只需要在 FB 里扩接口,不用动其他电机的逻辑。这个思路今天不展开,但你在学会启保停之后,一定要往这个方向走。
4. 仿真调试:PLCSIM 验证逻辑
4.1 V18 仿真流程
写完程序,下一步不是上真机,而是仿真。这也是博图相比老版本 Step7 最大的优势之一,可以在没有硬件的情况下把逻辑验证个八九不离十。
在博图项目树中,选中 PLC 站点,然后点工具栏上的“启动仿真”按钮。第一次仿真时,软件会提示你保存仿真项目,点击确定,然后 S7-PLCSIM 窗口会自动打开。这个窗口类似一个模拟 CPU 的面板,有 RUN、STOP、MRES 按钮,还有运行状态指示灯。
仿真启动后,点一下“下载到设备”,把硬件组态和程序下载到仿真 CPU 中,然后将仿真 CPU 切到 RUN。此时回到 OB1,点一下“启用/禁用监视”小眼镜图标,梯形图上就会出现绿色/蓝色线条,ON 的触点会显示为绿色,电流流向一目了然。这是排查逻辑问题最好用的工具。
4.2 博图 V18 仿真无法启动的常见原因
网上搜“博图 v18 仿真无法启动”的人特别多,我当年也遇到过,折腾了几个小时。总结下来,最常见的就这几类:
第一,许可证不完整。仿真组件是独立授权,很多情况下软件装好了,但 SIMATIC S7-PLCSIM 这个授权项没有,仿真就启动不了。怎么确认?打开 Automation License Manager,看有没有包含 PLCSIM 的授权条目。第二,杀毒软件拦截。博图仿真需要启动若干后台通信服务,杀毒软件一旦拦截,仿真窗口起不来或者起来后编程设备连不上。建议把博图整个目录加入白名单。第三,项目路径问题。项目文件所在路径如果包含中文,或者层数太深,仿真组件会初始化失败,把项目挪到纯英文的短路径下,比如D:\PLC\Motor_Start_Stop,能解决很多莫名其妙的问题。第四,电脑内存不足。V18 搭配 PLCSIM 仿真,8G 内存真的会卡到怀疑人生,建议最少 16G,项目大一点 32G 都不嫌多。
如果仿真按钮点了没反应,或者弹出一个看不懂的英文报错,不要反复重启软件。先查授权,再查路径,再查杀毒,按这个顺序来,大概率能找到原因。
4.3 用监控表做“强制”调试
仿真跑起来之后,怎么验证启保停逻辑?我推荐用“监控表”功能,比直接开变量表更可控。在项目树“监控与强制变量”下新建一个监控表,把 I0.0、I0.1、I0.2、I0.3、Q0.0、Q0.1 都拖进去。
然后利用监控表的“修改值”功能,把 I0.0 修改为 1,也就是模拟按下启动按钮。这时看程序监视画面,Q0.0 应该变为 ON。接下来把 I0.0 改回 0,模拟松开按钮,Q0.0 依然保持 ON,说明自锁生效了。再把 I0.1 修改为 0,模拟按下停止按钮,Q0.0 马上变为 OFF,松开 I0.1(改回 1),Q0.0 还是 OFF。这样就完整验证了一遍启停逻辑。
这里要特别留意的是,如果程序没反应,先检查 I0.1、I0.2、I0.3 的当前值是不是 1,只要有一个是 0,回路就是断的。仿真时的输入状态不会自动是 1,必须手动给,这也是很多新手一上来就卡住的原因。操作这些值的时候,建议在“修改值”里一个一个来,不要同时强制多个输入,以免逻辑变得混乱。
5. 下载到真实 PLC:联调和上电检查
5.1 下载前的三查
仿真通过之后,程序逻辑基本没大问题了。接下去就是下载到真实 PLC。这一步如果前面没准备好,下载时会各种报错。我的习惯是“三联查”:
查硬件组态和实物是否一致。你组态的 CPU 型号、固件版本、扩展模块,是否和你手里这台设备对得上。最常见的问题是组态版本比实物固件高,下载时提示固件不匹配。查 IP 地址。博图里组态的 PLC IP 要和真实设备在同一个网段,比如程序里设 192.168.0.1,那电脑网卡就要设成 192.168.0.x。查 PG/PC 接口设置。下载前在“扩展的下载到设备”里,要选择正确的网络接口,否则搜索不到设备。
如果你不确定当前 PLC 的 IP,可以先通过“在线和诊断”里的“可访问设备”去搜索,找到设备后直接分配一个新 IP,再重新连接。
5.2 下载和试车步骤
连接好网线,博图里点“下载到设备”。在弹出的对话框里选择目标设备,如果搜索到多个设备,通过 MAC 地址或设备名称来区分。下载完成后,把 CPU 切到 RUN,Q0.0 端的输出就能测试了。
试车这一步,我强烈建议分两步走:先不带主回路,只测 PLC 输出。也就是说,你按启动按钮后,观察 Q0.0 对应的输出端子是不是有 24V 信号,逻辑对了再往下接。第二步才接接触器、指示灯这些负载。直接跳过空测试、一上来就带接触器带电机,如果程序里有一个位没想明白,可能出现误动作,轻则接触器咔咔乱跳,重则烧设备。
另外一个安全上的常识,PLC 的输出点驱动能力有限,尤其是继电器输出型,直接驱动大电流接触器线圈很容易烧触点。一般需要在 PLC 外部加中间继电器,让 PLC 输出只驱动中间继电器线圈,再由中间继电器触点去控制接触器线圈。这样分层隔离,PLC 输出点寿命会高很多。
5.3 为什么推荐先仿真、再空载、再负载
这个顺序不是死板教条,而是被教训换来的。仿真能帮你过滤掉 80% 的逻辑错误,空载试机能帮你发现 10% 的 I/O 接线问题,剩下那 10% 才需要真正带载去验证。如果不先仿真,直接带载上电,万一程序里自锁写反了,或者停止信号用了常开,启停按钮一按下去,设备可能完全不受控制,现场就危险了。
我见过有些同行嫌仿真麻烦,写完程序直接下载到设备上调试,出问题才回头查程序。说实话,碰到逻辑简单的小项目这样干确实省时间,但一旦项目复杂度上来,或者设备不能随便启停,仿真就是保命环节。养成“先仿真再下载”的习惯,对你的项目调试速度有非常大的帮助。
6. 高频问题与避坑速查
6.1 找不到许可证怎么处理
“博图 v18 找不到许可证”是这段时间群里问得最多的问题之一。出现这个问题的原因,大部分是在安装完成之后没有正确激活授权,或者授权服务没有启动。
如果你用的是正版授权,打开 Automation License Manager,在“许可证密钥”列表中检查是否有 SIMATIC TIA Portal V18 和 SIMATIC S7-PLCSIM 对应的条目。如果有条目但博图依然提示找不到,尝试把授权的类型改成“单机”或“网络”,然后重启软件。还有一种情况是试用授权到期,那只能走正式渠道续期或购买。
这里还是要劝一句:别用来路不明的“注册机”或“补丁”。工业软件牵涉到设备调试,一旦授权文件被破坏,你的项目文件可能在某个时间点突然打不开,现场交不了货,那时候再着急也没用。软件授权这块,正规渠道永远最省心。
6.2 real move_blk 这类报错怎么查
有网友在群里问“博图 v18 real move_blk”报错的问题,这个虽然和我们的启保停程序关系不大,但既然问的人多,我就一起说下排查思路。
报错信息里带 MOVE_BLK 的,基本都是数据类型匹配问题。MOVE_BLK 指令的作用是把一块连续的数据从一个区域复制到另一个区域,要求源和目标的数据类型、长度一致。如果你在程序里对一个 REAL 数组使用 MOVE_BLK,源和目标方向写反,或者源/目标声明的是优化访问块,而指令是在非优化访问上下文中使用,就会出各种奇怪的编译错误。
排查方法是双击错误信息定位到具体指令,检查操作数类型;然后查看源和目标是 FC 调用还是直接寻址;最后看看是不是需要切换访问方式。如果指令支持用 MOVE_BLK_VARIANT 替代普通 MOVE_BLK,优先用带 VARIANT 的版本,它对优化访问块的兼容性好很多。实在不行,把报错信息截图、发到技术社区,带上完整的指令上下文,别人才能帮你定位准确原因。
6.3 其他高频问题速查表
| 问题 | 可能原因 | 处理思路 |
|---|---|---|
| 仿真无法启动 | 授权不全、路径含中文、杀毒拦截、内存不足 | 依次检查授权、路径、白名单、内存 |
| 找不到许可证 | 授权未激活/试用过期 | Automation License Manager 检查并激活正式授权 |
| 下载失败 | IP 不在同一网段、PG/PC 接口选错、固件不匹配 | 先“可访问设备”搜索,再修改 IP,最后检查固件 |
| CPU 报诊断故障 | 模块组态与实际不符、地址被占用 | 打开诊断缓冲区,按条目逐条确认 |
| 程序监视看不到变量状态 | DB 块设置了优化访问 | 在 DB 属性中取消“优化的块访问”,或者用绝对地址监视 |
| V14 打开 V18 项目失败 | 高版本项目不能向下兼容 | 在 V18 中将源项目另存为低版本(或导出源文件) |
| 程序下载后 CPU 无法 RUN | 存在编译错误或硬件组态错误 | 编译阶段先清零错误,再重新下载硬件配置 |
这些坑,我基本都踩过,有些甚至不止一次。搞工控就是这样,解决问题的时候觉得烦,但每解决一个,你对整套体系的理解就深一层。
最后再分享一个小技巧。写完程序之后,我会把 I/O 分配表打印出来,对着现场图纸一个点一个点核对,确认 PLC 输入端子接的是启动按钮常开,输出端子接的是接触器还是中间继电器。这个操作看着笨,但它能保证你在现场调试时少烧几个接触器、少熬几个通宵。电机启停控制只是入门,把这一套思考方式练扎实,后面做模拟量、做 PID、做伺服,你会发现本质上都是同一个套路:先把控制要求想清楚,列变量,画逻辑,再上机验证。程序是写出来的,更是想出来的。