上个月我把手头的《西门子AF框架》英文文档翻译到了第十六章,正好卡在通信这一块。AF框架(Application Framework,应用框架)是西门子做标准化自动化项目时常用的一套工程规范,从变量命名、程序块划分,到HMI画面和通信服务,都有固定的搭法。这套东西平时散落在各个项目里,很少有人把英文原版一页页啃下来,所以我在翻译的时候就想着,与其闷头翻完就丢,不如把第十六章的翻译思路和对应的实操校验一起整理出来,给同样在搞S7-1500、TIA Portal(博途)通信调试的同行省点时间。
先给结论:我手上这个版本文档,第十六章讲的是AF框架的通信层,大约五十多页,核心围绕“对象模型—通信服务—协议映射”三件事展开。翻译本身不难,难的是文档里每个抽象名词背后都挂着大量工程细节——这些原文不会写,但调试现场只要有一个对不上,就得白折腾半天。下面我按章节拆开讲,文末还放了一份可以直接抄的通信调试检查清单。
1. 先弄清楚AF框架是什么:我为什么要把第十六章单独拎出来
1.1 框架不是软件,是“搭项目”的规矩
很多刚入行的工程师一听到“框架”这个词,第一反应是某个软件包或某个安装文件。实际不是。AF框架更像一套“搭项目的规矩”,它规定了你在TIA Portal里怎么建文件夹、怎么给变量命名、程序块各自负责什么、HMI画面和上位机怎么跟PLC交换数据。
打个比方:同样盖一栋楼,有施工规范和无施工规范的差别,不在于每块砖本身有什么不同,而在于楼建成后能不能统一维护、快速复制。AF框架解决的就是自动化项目的“可复制性”和“可维护性”。企业用同一套AF框架做十个类似产线,新来的工程师能很快看懂第二个产线的程序,因为命名、结构、接口都是约定的。
我在翻译第十六章的时候,最大的感受就是:前面十五章讲的都是“规矩本身”,第十六章讲的是“这些规矩怎么和外部的设备、系统对话”。前面的章节你可以不懂通信也能翻,但第十六章不行,这一章要求翻译的人不仅懂英语,还得懂OPC UA、PROFINET、Modbus这些协议的基本工作原理。
1.2 第十六章在整套文档里的位置
我这套AF框架文档的结构大致是这样的:最开始是项目规划、硬件组态,中间是程序块库和HMI画面模板,再往后就是通信服务,然后收尾是诊断维护。第十六章恰好排在可视化章节之后,是全文档中第一道“跨系统”的分界线,所以它的存在感特别强。
为什么通信章节值得单独翻译?因为它把两个世界接在了一起:一边是PLC里按AF框架搭好的DB块、工艺对象,另一边是MES、SCADA、机器人、变频器、仿真软件这些“外部系统”。你在搜的那些场景,比如S7-1500和KUKA机器人交互、Process Simulate通过OPC UA和PLC通信、KepServer连接S7-1500、S7-200 SMART和变频器做RS485通信,本质上都属于这一章的范畴。
1.3 翻译这章需要哪些前置知识
我不是专业翻译出身,就是一线做项目顺手翻文档的工程师。翻通信章节之前,我自己列了个前置知识清单,缺哪块补哪块:
- TIA Portal基本操作:至少会建项目、组态PLC、写简单程序。
- S7-1500硬件特性:知道固件版本、IP设置、PROFINET接口这些基础概念。
- OPC UA基础:知道Server/Client是什么、端点(Endpoint)、安全策略、节点浏览这些词。
- Modbus RTU基础:知道功能码03和04的区别、保持寄存器和输入寄存器的区别。
- PROFINET基础:知道设备名、GSD文件、IP和设备名绑定这些概念。
没有这些前置知识,第十六章很多句子是没法翻的。比如原文写“The communication service is routed via the configured channel”,如果你不知道channel在这里指硬件接口和驱动通道,很容易翻出“通信服务通过已配置的渠道被路由”这种谁也看不懂的话。
2. 第十六章的主线:对象模型、通信服务、协议映射
2.1 对象模型:逻辑设备和物理连接必须分开理解
AF框架文档里有个贯穿始终的概念叫“对象模型”。在通信章节,它反复强调一件事:逻辑设备和物理连接是两回事。
逻辑设备指的是你在框架里创建的工艺对象,比如一台泵、一个风机、一个电机驱动。物理连接指的是这个对象的数据到底通过哪个接口、哪条线、哪种协议进出PLC。文档里用“通信对象(communication object)”“通道(channel)”“服务(service)”三个词把这层关系固定下来。
我在翻译时特别注意区分“对象”和“实例”这两个词。原文里的object泛指框架里的工艺对象,instance特指某个具体程序块的实例化数据。这两个词在不同章节里频繁混用,如果术语表不提前定好,第十六章翻完了回头一看,上下文是打架的。
2.2 OPC UA、PROFINET、Modbus 在第十六章的戏份是怎么分配的
不同协议在这一章里的篇幅差异很大,翻译时也必须区别对待。我按自己的理解做了个归类:
| 服务类型 | 典型应用场景 | 第十六章里讲的重点 |
|---|---|---|
| OPC UA | 上位机、MES、仿真软件、跨系统数据交换 | 服务器启用、端点配置、安全策略、节点浏览 |
| PROFINET | 分布式IO、机器人、伺服、智能设备 | 设备组态、GSD文件、共享设备、I/O地址映射 |
| Modbus RTU/TCP | 变频器、仪表、老设备、第三方控制器 | 功能码、寄存器映射、主从站配置 |
另外有个容易忽略的点:AF框架的程序块库里不只有电机、阀门这些基础块,还有安全类的功能块,比如很多人在搜的muting功能块。这个块做的是安全光幕的短时屏蔽逻辑,牵涉AOPD、ESPE、屏蔽时间这些安全术语,在文档里会和PROFIsafe通信放在相近的位置。翻译这种内容时,安全术语必须查标准,不能自己发挥,否则会出大问题。
2.3 最容易翻错的五个术语
翻译不光是单词对应,更重要的是“单看都对,连起来不对”的情况。第十六章里我整理出五个最容易翻错的术语:
| 英文术语 | 我的译法 | 为什么这样翻 |
|---|---|---|
| tag | 变量 | 西门子语境里tag就是PLC变量或HMI变量,译成“标签”很误导 |
| channel | 通道 | 指通信驱动的接口实体,不要译成“渠道” |
| service | 服务 | 指通信服务这个整体机制,译成“业务”会跟业务逻辑混淆 |
| instance | 实例 | 程序块实例化,保持和TIA Portal界面术语一致 |
| muting | 屏蔽 | 安全光幕短时屏蔽,常被误译成“静音” |
如果你也在翻西门子文档,建议从一开始就建一张术语对照表,后面所有章节都按同一套译法走,否则“同样的英文词在不同章节出现不同中文”,读的人一定会被绕晕。
3. 文档没写但调试必须知道:用实操校验第十六章
翻译第十六章的过程中,我把文档里描述的通信服务在真机上验证了一遍。文档只讲“应该怎么做”,没讲“做的时候会踩什么坑”。这一节我专门说文档没写到、但调试现场一定会遇到的事。
3.1 S7-1500 开 OPC UA Server:让 Process Simulate 和 KepServer 来读
S7-1500固件版本在2.0以上基本都支持OPC UA服务器功能。启用方法是:在TIA Portal里选中PLC,打开设备组态,在属性里找到“OPC UA”设置,勾选“启用OPC UA服务器”,然后配置端口号(默认4840)和安全策略。测试阶段建议先选“匿名访问”,等把数据读通了再上签名加密,不然证书那一步就能卡住你一下午。
我之前用KepServer 4.5连接S7-1500时,走的就是OPC UA通道。在Kepware里新建一个“OPC UA Client”驱动,填上PLC的端点地址,格式为opc.tcp://192.168.0.10:4840,然后浏览节点树,找到Objects → DeviceSet → PLC_1 → Program blocks,把需要的DB变量拖进来。
Process Simulate连PLC也是同一个思路。仿真软件作为OPC UA客户端,PLC作为服务器,两边都配好之后,在Process Simulate里关联PLC信号就能做虚拟调试。这里有个细节:S7-1500的程序块默认是优化访问的,外部OPC UA客户端能不能看到变量,取决于DB块的访问属性设置。翻第十六章时你就知道,文档里提过“通信服务的可见性由块属性控制”这句话是什么意思——实际项目里,你新建的全局DB如果没把“从OPC UA可访问”打开,外部客户端是浏览不到这个DB的。
3.2 SMART 200 做 Modbus RTU 主站:寄存器偏移永远是第一道坎
S7-200 SMART做Modbus RTU主站,用的是库指令MBUS_CTRL和MBUS_MSG。很多第一次接触的人直接卡在寄存器地址上。
Modbus协议里,保持寄存器是从40001开始编号的,但协议内部实际使用的是偏移量。MBUS_MSG指令里的“Addr”参数,我习惯直接按设备手册给的功能码地址来写,例如手册里说“运行频率地址为40009”,那么Addr就写40009,功能码写3。但要注意,如果你的设备手册给的是“数据寄存器编号40009”,而实际协议地址是“0x0008”,你就得先把寄存器号减去40001再换算,这个换算错一位,读出来的数据要么是零,要么是乱跳的。
还有从站地址:MBUS_MSG的“Slave”参数,范围是0到247,但Protocol规定从站地址1对应这里的0。也就是说,你给驱动设的Modbus从站地址是1,PLC这边Slave参数要填0;驱动设为2,PLC这边填1。这个映射关系我在一个项目里带过三个新人,三个都栽在同一处。
3.3 ModScan 能读串口而西门子侧读不到:完整的排查链路
之前论坛里有人问过一个问题:“ModScan能读取串口数据,但西门子组态软件不能读。”这个问题我在实际项目里帮人排查过,完整链路如下。
ModScan本质上是一个Modbus主站模拟调试工具,它通过USB转RS485接在串口线上,能读到设备数据,说明设备侧没问题、线也没有物理断掉。但同样的线接到S7-200 SMART的通信板上,程序轮询就是读不到,这种情况下按以下顺序排查:
- 检查RS485的A/B极性。很多USB转485适配器有自动极性识别,或者你之前随手接反了也能用,而PLC的485口是固定极性,A/B接反必然通信失败。这也是“ModScan能用、PLC不能用”最常见的原因。
- 检查共地。RS485虽然靠差分信号传输,但A/B线之间没有公共地电位的时候,干扰会非常明显。很多变频器现场,PLC和设备之间地电位不均衡,直接把两边的信号地并一根线就好多了。
- 检查波特率和校验位。ModScan默认波特率往往和组态软件设的不一致,比如ModScan用9600能读,PLC侧组态成了19200,照样读不到。
- 检查从站地址映射。ModScan里的“Slave ID”填的是设备实际地址,而SMART库的Slave参数需要减1,两者搞混,PLC这边一直报“从站无响应”。
- 检查功能码。有的设备把参数放在保持寄存器(功能码03),有的放在输入寄存器(功能码04),ModScan两个都试了能读,不代表PLC侧组态的功能码也选了正确的那一个。
排查完之后看MBUS_MSG的“Error”输出,常见错误码含义如下:
| 错误码 | 含义 | 常见原因 |
|---|---|---|
| 0 | 无错误 | 正常 |
| 1 | 校验错误 | 波特率、校验位不一致 |
| 2 | 从站无响应 | 从站地址错、线没接好 |
| 3 | 接收超时 | 从站响应慢,超时时间设得太短 |
| 6 | 总线忙 | 上一次发送未完成就开始下一次 |
这套排查顺序,我后来直接写进了自己项目的调试模板。文档里永远不会有这一页,但它比好几章理论知识都有用。
3.4 变频器、机器人这些三方设备:AF框架管到哪一层
第十六章标题虽然是“通信服务”,但它讲的是AF框架这一侧的规矩。ABB变频器、三菱变频器、森兰SB200这些非西门子设备的寄存器映射,文档基本不管,你得自己去查各家手册。翻译时我也专门做了个备注:文档只负责“通信通道”这一层,谁的数据站在哪个寄存器上,是设备厂家定义的。
S7-1500和KUKA机器人交互也是同理。机器人侧通常作为PROFINET IO设备,你需要在TIA Portal里导入对应的GSD文件,设置设备名,并且在机器人控制器里把设备名和IP配成一致,两边才能握手成功。这条链路里,AF框架只规范了PLC侧的接口区怎么建DB、怎么映射I/O,机器人那套编程属于另一个体系。我翻译时特别提醒自己:不要因为AF框架里写了很多标准做法,就以为整个通信链路都是它的范围。
4. 翻译方法论:术语统一、长句拆解、治“手册腔”
这一节算是我翻了十几章攒出来的方法,不涉及具体项目,但对经常啃英文技术文档的同行应该有用。
4.1 先建术语表,跨章引用才不会打架
AF框架文档章节之间互相引用特别多,第十六章会引用前面“程序块库”的内容,也会给后面“诊断”章节埋钩子。如果每个章节各翻各的,同一个词就会出现多种译法。
我用的方法是先建一张术语表,四列:英文原文、标准译法、使用场景、备注。比如:
| 英文 | 译法 | 使用场景 | 备注 |
|---|---|---|---|
| framework | 框架 | 全文 | 不用“架构”,因为会跟architecture混淆 |
| block type | 块类型 | 程序块章节 | 对应TIA Portal里的“块类型” |
| faceplate | 画面模板 | HMI章节 | 不译成“面板” |
| commissioning | 调试/投运 | 全文 | 手动调试用“调试”,整体交付用“投运” |
有了术语表,第十六章翻起来就快得多,遇到拿不准的词先查表,没有的再补进去。翻译到后期,这张表反而成了比译文本身更有价值的成果。
4.2 西门子文档里的德式长句怎么拆
西门子的英文文档很多是从德文转译的,句子结构偏长偏绕。第十六章里像“The parameterization of the communication services of the automation framework via the TIA Portal configuration interface is described”这种句子不少。直译成中文会非常干涩,根本没法读。
我的拆法是三步:先找句子的主干,也就是主语、谓语、宾语;再把所有介词短语拆成独立短句;最后按中文的语序重组,该加“通过”“利用”“在……中”就加,不能让定语全部堆在名词前面。上面那句我改成:“本章描述如何通过TIA Portal组态界面,对AF框架的通信服务进行参数化设置。”读起来顺,意思也不丢。
翻译技术文档不能追求“字字对应”,追求的是“工程师读完能直接上手干活”。
4.3 三个办法治“手册腔”
技术文档翻出来如果一股“手册腔”,读者是看不下去的。我自己总结的三个办法是:
把被动语态改成主动语态。原文写“parameterization is performed by the user”,我改成“用户完成参数化设置”,主语明确、动作清晰。
把动词名词化结构改回动词。原文的“perform parameterization”直译成“执行参数化”,我改成“设置参数”。这个细节看着小,但对阅读体验影响极大。
翻完一节加一段实操备注。这就是前面第三节做的事。文档说“通信服务可以在通道不可用时报告错误”,我就备注一句“什么意思?通道断线后,DB里的状态字会置位,HMI上要做报警提示,否则现场根本不知道通信断了”。这些备注不属于原文档,但它们让整篇译文活了起来。
5. 照第十六章做一遍:两个最小通信工程和一张检查清单
5.1 最小工程一:S7-1500 的 OPC UA 服务让外部客户端读到实时数据
我建议想验证这一章内容的人,先搭一个最小的OPC UA工程:一台S7-1500、一个TIA项目、一台电脑上的OPC UA客户端。
在PLC里写一小段程序,用SCL往全局DB里写一个递增数值。比如新建DB名为CommDB,里面放一个DINT类型变量Counter,主程序里写:
#count := #count + 1; #count := #count MOD 1000; "CommDB".Counter := #count;然后到PLC属性里启用OPC UA服务器,把CommDB设为外部可访问。电脑上用UA Expert或者KepServer建立连接,浏览节点,找到CommDB.Counter,看到数值在变化,这一章最核心的概念就算落地了。
如果你还要进一步验证,就在HMI上绑定这个变量做画面显示,看看HMI标签和OPC UA读到的值是否一致。这里其实隐藏着一个原文档讲得比较绕的点:HMI访问和OPC UA访问走的是同一条数据链路,数据一致性比传统的DP通信要可靠得多。
5.2 最小工程二:SMART 200 轮询变频器并处理错误码
第二个最小工程更偏现场:S7-200 SMART接一个RS485变频器,轮询读取运行频率和电流。
组态思路是:每个扫描周期都调用MBUS_CTRL进行主站初始化,然后在需要的时候用MBUS_MSG做单次读写。注意MBUS_MSG同一时间只能有一个调用在运行,所以一般用一个定时触发加标志位来做轮询。我习惯把轮询逻辑写成:Train先读频率,读完置位标志,再读电流,读完复位标志,重新开始。这样保证总线上同一时刻只有一个请求。
至于读写的数据,记住前面说过的寄存器偏移换算。设备手册给的频率寄存器是40009,实际换算后协议地址是8,但在MBUS_MSG里我直接填设备侧地址加功能码的组合,不自己多绕一层。具体以你用的指令库版本和驱动手册为准,但思路是固定的。
这个工程做完,再加上3.3节那套排查链路,第十六章的Modbus内容就基本吃透了。
5.3 通信调试检查清单(可直接抄)
下面这份清单是我从多个项目里攒出来的,可以直接复制到你的调试文档里:
- 确认RS485极性A/B正确,屏蔽层单端接地。
- 确认PLC与设备之间共地,避免电位差。
- 终端电阻只在总线两端连接,中间节点不接。
- 波特率、数据位、校验位、停止位两端完全一致。
- 从站ID确认,注意部分指令库从0开始对应实际地址1。
- 功能码和寄存器区选择正确(03保持寄存器、04输入寄存器)。
- 寄存器编号按设备手册换算,减去协议偏移后验证。
- 浮点数注意字节序:大端还是小端,32位还是16位。
- 轮询周期不要太短,给从站留够响应时间。
- 首次联调用ModScan加串口监听,把协议报文先调通再接PLC。
这一张清单救过我很多次现场,比任何工具都好用。
5.4 第十六章翻完之后,第十七章大概率是什么
按AF框架文档的套路,通信章节后面一般跟着诊断和维护。常见的下一章内容会涉及PLC诊断缓冲区、OB82/OB86这些诊断组织块、HMI报警组态、设备状态字和故障字的设计。如果你正在准备往下翻,建议提前熟悉Get_IM_Data、PROFINET诊断记录这类PLC侧的东西,那样第十七章就不会太吃力。
我在实际翻译中还有一个体会:通信章节是所有章节里最需要“硬件在场”的一章。光坐在电脑前翻,很多句子只能靠猜;旁边的试验台上放着一台S7-1500和一根串口线,翻译质量立刻就不一样。所以我后来建议公司里其他做文档翻译的同事,动手翻之前先把手头项目相关的设备跑一遍,哪怕只是通个电、看看在线变量,也比纯看词典强。这也是我这十六章翻完后,最想传达给同行的一件事。