上个月在客户现场处理一台转盘机的同步报警折腾了半天最后发现就是OB91没建。说起来挺普通的故障但确实容易让人绕圈子博途TIA Portal里一勾等时模式编译就直接报错不勾运动控制轴又没法用。很多朋友第一反应是查硬件、查网络、查伺服参数其实问题多半出在组织块上。这篇文章就专门聊这个事我会从报错原理讲起再给你一套完整的OB91新建与配置流程最后附上我踩过的坑。不管你是刚接手博途的新人还是被这个“等时模式报错”卡过几次的老手看完应该都能直接上手。1. 等时模式报错到底在报什么1.1 报错的常见现场和典型表现先说最常见的三种情况。第一种你在硬件组态里选中CPU或者PN接口勾选了“启用等时同步模式”之类的选项点编译后TIA直接弹出一个红色叹号提示有某个组织块缺失或者未指定。第二种报错不出在组态阶段而是在下载后看诊断缓冲区才看到类似“同步循环中断OB未装载”的记录。第三种最隐蔽设备能编译也能下载但轴一使能就报“同步错误”或“等时模式激活失败”PLC里的OB90都被踩碎了唯独OB91被忽略。这些都是等时模式下典型的OB91缺失配套报错。等时同步模式对PLC而言不是靠普通循环扫描就能实现的它依赖一个专门的循环中断机制来做数据锁存和同步位。没有这个机制高速输入输出的刷新节奏就会乱运动控制等对确定性要求高的任务根本跑不起来。提示如果你只是跑普通逻辑控制OB91缺失通常不会影响你。一旦涉及PROFINET IRT、伺服运动控制、高速计数或探针锁存OB91基本就是必选项。1.2 为什么TIA偏偏要OB91要理解这个问题得先明白CPU里组织块的分工。OB1是主循环OB30到OB38是循环中断OB40到OB47是硬件中断OB80到OB88是异步错误中断而OB90是后台循环。OB91属于同步循环中断它和普通的循环中断最大的区别在于OB91的执行周期不是由CPU自由决定的而是由等时同步总线循环周期直接驱动的。换句话说OB1/OB30这类块的调用和总线通信是“松散耦合”的不保证每个通信周期内都被处理而OB91是被通信时钟硬同步的在每个同步循环周期里CPU先接收最新的输入数据、调用一次OB91、再送出输出数据。这样从输入采样到输出更新的整个过程就能锁在一个固定的时间槽里重复精度高抖动小。TIA在编译等时组态时发现OB91不存在等于是CPU没有给这个硬同步逻辑预留执行窗口自然就要报错。这里建议用生活化类比来理解普通循环像快递员按自己路线挨家送件时间有浮动等时模式就像高铁所有车都得卡着时间表发车和到站。OB91就是那本列车时刻表没有它调度中心根本没法把车次串到同一根时间轴上。1.3 等时同步模式的应用场景等时模式不是所有项目都要开但凡是要求信号处理时间一致的场景都得用它。最典型的是多轴伺服协同比如印刷机的印刷辊筒和裁切刀必须严格同步轴间相位偏一点点都会出废品。其次是高速包装机、飞剪、造纸传动、钢铁处理线的张力控制还有需要精确位置锁存的测量系统。在这些场合里处理时间的不确定性是必须被排除的OB91的作用就是把这个不确定性从控制链路里拿掉。另一个比较常见的场景是PROFINET IRT通信。IRT是高实时性的实时通信数据交换被固定在通信周期中CPU和IO设备都按同一个时钟节拍工作。博途里启用IRT时往往也需要在CPU侧配置好同步循环组织块否则实时通信报文的调度没法锚定在PLC程序层面。2. 从零新建OB91组织块手把手配置流程2.1 新建OB91之前的检查清单动手建OB91前先把几件基础事项确认好免得建完还是一堆报错。第一确认PLC固件版本。OB91在S7-300/400时代就存在在S7-1200/1500里同样支持但不同固件版本对等时同步功能的支持力度不一样。S7-1200只在部分固件版本支持PROFINET的等时同步S7-1500则比较完整。所以你如果拿着S7-1200做运动控制最好先查一下固件版本和工艺对象支持范围别等到建完OB91才知道CPU硬件本身不支持。第二确认硬件组态里已经添加了支持IRT或等时同步的PN接口。等时不仅要PLC侧支持IO设备、伺服驱动器那一侧也得支持而且通信周期设置要在所有设备间一致。组态时如果网络上的某个从站不支持IRT你用IRT通信反而更麻烦。第三规划好同步循环周期。周期不是随手填的要根据工艺需求、通信网络带宽、CPU处理能力综合确定。工业现场常用的同步循环周期是1ms、2ms、4ms这几个档位周期越小实时性越好但对CPU性能和网络稳定性要求也越高。如果你工艺要求没那么激进先按2ms或4ms起步比较稳。注意OB91的循环时间必须和总线同步循环周期保持整数倍关系。也就是说OB91的周期要么等于通信周期要么是通信周期的2倍、4倍。非整数倍会导致编译报错。2.2 在博途里新增OB91组织块的具体步骤下面直接拆步骤按这个顺序做基本不会踩雷。第一步打开项目在左侧项目树中找到“程序块”文件夹双击进入。在程序块区域右键选择“添加新块”在弹出窗口左侧选“组织块”。右侧会出现OB列表你会看到OB1、OB10、OB30、OB82、OB91等。注意OB91的名称就是“同步循环中断”有些版本里显示为“Synchronic cycle interrupt”认准名字别选错。第二步选择OB91后下方“语言”可以选择LAD、FBD或SCL。这里选什么都行因为OB91内部逻辑通常很简单甚至可以是空块。但我个人建议用SCL因为有时候你需要在OB91里做少量数据处理或标志位翻转SCL写起来最快。第三步点击“创建”块会自动生成到你程序块文件夹里。创建完成后会默认打开OB91的编辑界面。此刻不要急着写代码先看属性设置。第四步在OB1编辑器左侧属性窗格里找到组织块的“属性”配置页。重点看“中断优先级”和“循环时间”这两项。对于等时同步OB91中断优先级应设为最高在S7-1500里通常默认就是最高的数值不建议手动调低循环时间则一般选“从等时同步总线循环时间派生”让TIA自动对齐。如果版本允许手动输入就按我们在上一节规划的周期来填。第五步OB91代码区可以留空也可以加一段用于监视的代码。比如在OB91里置位一个布尔量“SyncOB_Run”在OB1里读这个变量确认OB91在跑。这种方法对现场诊断非常有用建议养成习惯。2.3 在硬件组态里把OB91和同步循环关联起来OB91建好只是第一步真正让等时模式生效要在硬件组态里完成绑定。进到设备组态页先选CPU再在下方属性窗口切到“实时与中断”或者“同步循环”这个页签。不同博途版本菜单位置有差异但一般在PROFINET接口属性、CPU属性或者工艺对象的配置界面里能找到“同步循环”这个词。在里面把“启用等时同步模式”打勾然后从组织块下拉框里选择刚才建好的OB91。这一步就是告诉PLC同步节拍由OB91来承载数据刷新以它为准。接着检查网络上的其他支持等时同步的站。比如你挂了SINAMICS驱动器或者ET200SP做高速IO需要分别进入这些设备属性的PN接口设置把它们的通信周期和同步循环使能都打开并且周期值要和CPU侧一致。这里最容易出的问题就是不同设备周期值差了零点几毫秒导致编译报“周期不匹配”。设置完成后整体编译一次。如果所有配置都正确编译应该通过程序块和硬件组态都不会有红叉。此时下载到PLC再去看诊断缓冲区正常会看到与同步循环相关的状态信息。伺服轴使能后在工艺对象监控表中也能看到同步状态为“已同步”。提示有些项目组态完成后是先把OB91下载到CPU再下载完整组态。顺序不对时可能提示“软件不一致”不用怕全量下载一遍即可解决。3. 等时同步的参数和OB91代码细节怎么处理3.1 中断优先级、周期和相位偏移的合理设定很多朋友建OB91时最容易忽略的就是中断优先级。如果OB91的优先级低于某些普通中断等时同步节拍会被其他高频中断插队一旦某个周期执行时间超限CPU会立刻报“同步丢失”并可能导致轴故障。所以OB91的中断优先级一定要比普通循环中断和硬件中断高也就是数值上要更大。S7-1500里如果看到优先级范围是0到31那么OB91通常应该靠近31那一侧。再说周期选择。OB91周期如果设得太短程序执行时间容易超限CPU诊断缓冲区会记录“OB91执行时间超过循环时间”设得太长实时性又达不到工艺要求。一般来说把通信周期作为基准OB91周期与它相等即可。如果OB91里逻辑比较重比如要算大量位置规划数据那可以放宽到2倍周期但每个同步周期只执行一次OB91显然不能满足实时性要求更高的工艺。实际项目中要先估算OB91代码最坏执行时间再反推周期设置。至于相位偏移这是一个可调参数。它指的是OB91的触发时刻相对于总线循环周期的偏移量。合理的相位偏移可以避开网络通信的高峰时段让CPU在接收数据稳定的窗口里去执行同步逻辑。但对新手来说我建议先用默认值等系统跑起来后再用示波器或者PLC的测量功能看实际抖动没有异常就不要去动它。3.2 OB91内部写什么内容、不写什么内容OB91不是普通的主循环不能随便把逻辑往里塞。它遵循“短小精悍”的原则只做对时序敏感的事。适合放进OB91的内容包括高速输入信号的锁存提取、输出信号的同步刷新、轴当前位置的快速读取和处理、需要在每个通信周期内严格保持计算间隔的算法段。还有从上一个周期到当前周期的时间差计算这一项放到OB91里最合适因为它的触发周期是固定的。不适合放进OB91的内容包括通信指令Modbus、TCP、USS等、文件操作、定时器扫描、PID循环运算、数据块的大批量拷贝。这些东西的调用时间不可控放进OB91很容易让执行时间超限。特别是通信指令有些指令内部有等待机制会直接拖垮OB91的周期。我在实际项目中见过有人把整段运动控制程序都堆到OB91里结果CPU负载飙升轴一跑快就报“同步周期超时”。后来把逻辑拆开OB91里只留与总线时钟相关的同步任务其余移到OB1和普通循环中断里故障立刻消失。3.3 用变量监控OB91状态来判断同步是否正常建好OB91和硬件组态后光看编译通过还不够设备运转中一定要能监控到同步状态。我的习惯是在OB91里放置几行状态代码。比如在OB91里写一个SCL片段每执行一次就对某个Int变量加1这个变量形成循环周期内的实际脉冲计数。然后在HMI或者变量监控表中观察这个计数值是否稳定在上一个周期对应的数值区间。假设同步周期为2ms那么1秒内OB91应当执行500次。如果这个数值偏差过大说明同步周期不对或者OB91被其他中断延迟了。还可以在OB91里置位“OB91_Heartbeat”布尔变量在OB10或者OB1里定时读取并复位。若这个心跳信号消失说明OB91长时间未执行可以触发HMI报警。这个套路看起来土但排查等时同步故障时非常有效。独家技巧在博途的“监控与强制表”里可以把OB91执行计数器单独拉出来做曲线记录。如果曲线呈锯齿状多半是某个更高优先级的中断占用了OB91的时隙需要检查硬件组态里的中断配置。4. 常见故障排查与避坑实操笔记4.1 编译报错“缺少同步循环组织块”的处理这是最典型的报错通常出现在组态了等时模式但程序块里没有OB91的时候。解决方式就是我们在第2节里讲的添加OB91并绑定到同步循环配置。但有几种变体会让人摸不着头脑。第一种变体是OB91已经存在可编译仍报缺失。这通常是因为OB91在程序中不是“独立存在”而是被放进了某个用户库或仅存在于旧版本项目中没有被同步到当前设备组态。处理办法是在程序块中检查OB91是否真的在当前PLC的“程序资源”下如果是从外部库拖进来的删除后重新添加一个原生OB91。第二种变体是OB91被删除了但组态里还残留着同步循环引用。博途有时不自动清理失效的组织块引用编译会给出一个指向硬件组态的错误。这时去CPU属性里把同步循环配置重新选择一次让绑定恢复到有效OB91上。第三种变体出现在多CPU机架中比如两个CPU共用一段PROFINET网络其中一个CPU没有OB91也会导致网络组态编译异常。遇到这种情况要把所有参与IRT通信的CPU都检查一遍OB91配置不能只盯着报错的那台CPU。4.2 OB91建了但等时模式仍然无法激活的原因这种情况比上面更让人头疼OB91明明建了可硬是激活不了。我梳理了比较常见的几个原因。第一OB91的周期和总线同步周期对不上。比如OB91手动设置了3ms而通信周期是2ms3与2不是整数倍关系编译时不报错下载后激活时报错。检查方式把OB91的循环时间改成“从总线循环时间获取”或者确认是2ms/4ms这样的整数倍关系。第二OB91的中断优先级和其他同步相关中断冲突。比如你在OB91之外又启用了OB61或OB62这类高速同步中断两者抢优先级导致同步激活失败。尽可能精简同步类组织块保证只有一个同步节拍来源。第三下载顺序不对。等时同步模式的激活是CPU在启动时完成的如果你只是热下载程序块没有重新启动CPU那同步组态不会重新初始化。下载完成后做一次“停止—启动”或者“重新启动所有模块”让同步配置重新生效。第四工艺对象里没有把轴配置为“等时同步模式”。有些项目里PLC层面同步配置好了但轴参数里没选择等时导致轴使能时依然报错。去工艺对象“轴”的属性里找到“运行模式”或“同步模式”相关选项明确选择等时同步。4.3 OB91执行超时的判断和处理这个故障是设备运行中才浮现的比编译报错更隐蔽。OB91执行超时一般表现为CPU诊断缓冲区周期性出现“OB91超时”或者“同步丢失”轴有时会无规律停顿或报警。首先要区分是执行时间真的超了还是周期设置本身不合理。在博途的程序块属性里可以查看OB91的最大执行时间统计。如果最大执行时间已经逼近甚至超过循环周期说明代码需要精简或转移到其他循环里。如果执行时间正常但仍报超时则要考虑是不是网络通信本身不稳定比如PN电缆接线松动、接地不好或者网络中存在不支持同步的设备导致通信周期波动。我遇到过一种情况OB91执行时间只有0.1ms循环周期4ms但依然频繁报超时。排查了很久最终发现是第三方GSD设备不知道在什么情况下往网络里插入了非周期报文挤占了同步窗口。后来通过调整相位偏移和网络拓扑把问题解决了。这说明OB91配置不是孤立的它和整个PROFINET网络生态强相关。4.4 一个完整的排查样例从报警到解决把上面的方法串起来看一个具体案例。前阵子遇到一台贴标机控制方案是一个S7-1500带动6个伺服轴从站挂两个ET200SP。设备一上电就报“同步错误”轴完全起不来。我先看了诊断缓冲区核心报错是“PROFINET同步循环无法与工艺对象同步”。网上不少帖子说这种情况要删除OB91重建有用但没治本。接下来我检查了每个PN从站的周期设置发现其中一个ET200SP的更新时间被设成了1.5ms而CPU侧同步周期是3ms两者不是整除关系。博途编译时不报错但现场同步就是起不来。我把从站周期改成3ms后重新编译、下载、断电重启同步状态恢复正常。这个案例想说明什么等时同步配置是一个全局参数任何一个从站的周期不匹配都可能让整个同步链路失效。你在排查时不要只盯着CPU和OB91把网络里所有站点的周期设置都过一遍。5. 在等时同步项目里我要分享的几个实用习惯先说建块的命名问题。虽然TIA要求OB91叫“OB91”但块内部可以加注释说明用途和周期参数。我习惯在OB91的属性里写上“同步循环2ms对应CU320/ET200SP”这样项目备份后过半年再打开别人一看就知道这个块的来龙去脉。然后是版本管理的习惯。博途项目经常要在不同电脑间拷贝OB91这类系统组织块有时会因为版本兼容性问题被自动改名或迁移。每次从高版本往低版本转换项目时务必检查OB91是否还保留在CPU程序资源里少了就手动补建免得现场打开项目发现编译报错。还有一个容易忽视的细节OB91里如果写了访问外部硬件的逻辑比如读PROFINET IO的I/O地址一定要确保这些地址在硬件组态里存在。否则OB91可能在第一次执行时就触发硬件访问错误从而中断同步循环。这个问题在项目移植时最常见因为IO地址表和硬件拓扑可能已经变了。关于调试工具我也多说一句。博途自带了一张“同步循环监视”视图可以用来查看同步状态、周期抖动和丢帧情况。很多朋友用博途只盯程序编辑和硬件组态这个视图的存在感不强。但遇到等时模式问题它的作用往往比示波器还直接。某次排查轴抖动我就是在那个视图里发现OB91的实际触发周期在2ms和4ms之间跳变最后定位到CPU的负载分配问题减少了普通中断的占用后一切正常。最后再讲一个小技巧新项目启动时哪怕暂时用不到等时同步也可以先把OB91建好。这样后续增加运动控制或高速IO时不会临时插一脚省得改来改去引发额外的组态调整。我就是吃过这个亏前期漏建OB91后期加了4个同步轴每次变更都要小心翼翼重新编译网络组态绕了不少弯路。希望你看完这篇能一步到位不再被OB91的问题卡住。
阅读完成 · 觉得有帮助?